2 つの Web ページが類似しているかどうかを調べたい。wordnetの類似機能を備えたpython nltkが役立つかどうか、またどのように役立つかを誰かが提案できますか? この場合に使用する最適な類似関数は何ですか?
2 に答える
joyceschanが言及した spotigs の論文は、コンテンツの重複検出に対処しており、考察の材料がたくさん含まれています。
重要な用語の簡単な比較を探している場合は、nltk
標準関数で十分かもしれません。
WordNetに含まれるsynsetnltk
を検索することで、用語の同義語を引き出すことができます。
>>> from nltk.corpus import wordnet
>>> wordnet.synsets('donation')
[Synset('contribution.n.02'), Synset('contribution.n.03')]
>>> wordnet.synsets('donations')
[Synset('contribution.n.02'), Synset('contribution.n.03')]
複数形を理解し、同義語が品詞のどの部分に対応するかを教えてくれます
Synsetはツリーに格納され、より具体的な用語がリーフに、より一般的な用語がルートに配置されます。ルート用語は上位語と呼ばれます
用語が共通の上位語にどれだけ近いかによって類似性を測定できます
NLTK クックブックによると、異なる品詞に注意してください。パスが重複していないため、それらの間の類似性を測定しようとしないでください。
たとえば、 donationとgiftの2 つの用語があり、それらを取得できますsynsets
が、この例ではそれらを直接初期化しました。
>>> d = wordnet.synset('donation.n.01')
>>> g = wordnet.synset('gift.n.01')
クックブックでは、Wu-Palmer 類似度法を推奨しています
>>> d.wup_similarity(g)
0.93333333333333335
このアプローチにより、使用されている用語が関連する概念に対応しているかどうかをすばやく判断できます。Python を使用した自然言語処理を見て、テキストの分析を支援するために他に何ができるかを確認してください。
Spotsig の実装を検討する