質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

762閲覧

pythonにおけるNAND論理積を使用した自然言語抽出

amiska

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2022/06/24 08:53

編集2022/06/25 12:43

pythonにおけるNAND論理積を使用した自然言語抽出についての質問です。

やりたいこと
・reモジュールを使用した文字抽出。
・文に含まれる単語のうち、指定した単語が欠損している場合のみ抽出。
・\\\\で区切られた文それぞれに対してマッチするか判定。

やったこと
・他サイトを参考に下記のコードを実行しましたが、思うような挙動をしません。

python

1import re 2 3# マッチしてほしくない「せいきひょうげんにおける」「正規表現における\nNAND論理積マッチング」 4# マッチしてほしい「正規表現における\n論理積マッチング」「正規表現\nマッチング」 5s = "\\\\せいきひょうげんにおける\\\\正規表現における\nNAND論理積マッチング\\\\正規表現における\n論理積マッチング\\\\正規表現\nマッチング\\\\" 6 7target = ((?!.*正規表現)|(?!.*NAND)|(?!.*論理積)|(?!.*マッチング)) 8re.findall(target, s)

参考にしたサイト
https://faq.say-tech.co.jp/bom-for-windows-ver-7-0/p260

3.否定論理積(NAND)
否定論理積は、指定した複数の文字列について、全てが見つかった時には検知しません。(指定した文字列のう>ち、いずれかを含まなければ検知します)

キーワードとして「文字列1」、「文字列2」、「文字列3」を指定する場合、以下のように記述します。

^(((?!.*文字列1)|(?!.*文字列2)|(?!.文字列3))).$

その際、以下のテキストは検知されます。

テキスト内に文字列1と文字列2と文字列4が記載されたメッセージ

以下のテキストは検知されません。

テキスト内に文字列1と文字列2と文字列3が記載されたメッセージ

なお、「|(?!.*文字列)」を増やすことで、よりメッセージを絞り込むことができます。

^(((?!.*文字列1)|(?!.*文字列2)|(?!.*文字列3)|(?!.文字列4))).$

python

1例) 2単語「正規表現」「NAND」「論理積」「マッチング」のうち、1つ以上を含み、 3なおかつ欠損がある場合にマッチ。 4 5\\\\ 6# マッチしない例1 7# 対象の単語を1つ以上含んでいない 8せいきひょうげんにおける 9\\\\ 10# マッチしない例2 11# 対象の単語をすべて含む 12正規表現における\nNAND論理積マッチング 13\\\\ 14# マッチする例1 15# 対象の単語を1つ以上含んで欠損がある 16正規表現における\n論理積マッチング 17\\\\ 18# マッチする例2 19# 対象の単語を1つ以上含んで欠損がある 20正規表現\nマッチング 21\\\\

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2022/06/24 09:16

提示コードでは正規表現の部分でSyntaxErrorが発生します。 実行でき、なおかつ現象が再現、確認できるコードの提示をお願いします。
amiska

2022/06/24 09:30

修正しました
guest

回答1

0

ベストアンサー

python

1import re 2 3s = r''' 4\\せいきひょうげんにおける\\正規表現における 5NAND論理積マッチング\\正規表現における 6論理積マッチング\\正規表現 7マッチング\\ 8'''.strip() 9 10target = r'\\((?:(?!.*正規表現)|(?!.*NAND)|(?!.*論理積)|(?!.*マッチング)).*?)(?=\\)' 11print([i for i in re.findall(target, s, re.DOTALL) if i])

投稿2022/06/24 09:31

編集2022/06/24 13:41
melian

総合スコア19618

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amiska

2022/06/24 09:57

ご回答ありがとうございます。 変数sを「マッチしてほしくない文」を追加したものに変更しました。 「マッチしてほしい文」のみを抽出したいという意図です。 質問が分かりづらく申し訳ございません。
amiska

2022/06/25 03:43

ありがとうございます! 問題を解決することができました! 自分の実力では何日かけても解けなかったと思います。 本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問