Python-NLTK は入力文字列を認識し、空白だけでなく内容にも基づいて解析できますか? この状況で「コンピュータシステム」がフレーズになったとしましょう。誰でもサンプルコードを提供できますか?
input String : "コンピュータ システムの応答時間に関するユーザーの意見の調査"
期待される出力: ["A", "survey", "of", "user", "opinion", "of", "computer system", "response", "time"]
あなたが探しているテクノロジーは、言語学とコンピューティングの複数のサブフィールドまたはサブサブフィールドから複数の名前で呼ばれています。
NLTK の NE チャンカーの例を示します。
>>> from nltk import word_tokenize, ne_chunk, pos_tag
>>> sent = "A survey of user opinion of computer system response time"
>>> chunked = ne_chunk(pos_tag(word_tokenize(sent)))
>>> for i in chunked:
... print i
...
('A', 'DT')
('survey', 'NN')
('of', 'IN')
('user', 'NN')
('opinion', 'NN')
('of', 'IN')
('computer', 'NN')
('system', 'NN')
('response', 'NN')
('time', 'NN')
名前付きエンティティの場合:
>>> sent2 = "Barack Obama meets Michael Jackson in Nihonbashi"
>>> chunked = ne_chunk(pos_tag(word_tokenize(sent2)))
>>> for i in chunked:
... print i
...
(PERSON Barack/NNP)
(ORGANIZATION Obama/NNP)
('meets', 'NNS')
(PERSON Michael/NNP Jackson/NNP)
('in', 'IN')
(GPE Nihonbashi/NNP)
かなり欠陥があることがわかります。何もないよりはましだと思います。
用語抽出
ここにいくつかのツールがあります
OPの質問に戻ります。
Q: NLTK は "computer system" を語句として抽出できますか?
A:そうでもない
上に示したように、NLTK には事前に訓練されたチャンカーがありますが、それは名前エンティティで機能しますが、すべての名前エンティティが十分に認識されるわけではありません。
おそらく、OP はもっと急進的なアイデアを試すことができます。一連の名詞が一緒になって常に句を形成すると仮定しましょう。
>>> from nltk import word_tokenize, pos_tag
>>> sent = "A survey of user opinion of computer system response time"
>>> tagged = pos_tag(word_tokenize(sent))
>>> chunks = []
>>> current_chunk = []
>>> for word, pos in tagged:
... if pos.startswith('N'):
... current_chunk.append((word,pos))
... else:
... if current_chunk:
... chunks.append(current_chunk)
... current_chunk = []
...
>>> chunks
[[('computer', 'NN'), ('system', 'NN'), ('response', 'NN'), ('time', 'NN')], [('survey', 'NN')], [('user', 'NN'), ('opinion', 'NN')]]
>>> for i in chunks:
... print i
...
[('computer', 'NN'), ('system', 'NN'), ('response', 'NN'), ('time', 'NN')]
[('survey', 'NN')]
[('user', 'NN'), ('opinion', 'NN')]
そのため、そのソリューションを使用しても、「コンピューター システム」だけを取得しようとするのは難しいようです。しかし、「コンピューター システムの応答時間」を取得することは、「コンピューター システム」よりも有効な表現であるように少し思えます。
コンピューター システムの応答時間のすべての解釈が有効であるとは思わないでください。
そして、さらに多くの可能な解釈。したがって、抽出されたフレーズを何に使用するのかを尋ねてから、「コンピューター システムの応答時間」などの長いフレーズをカットする方法を確認する必要があります。