クエリ (文) とドキュメント (文のセット) の間の構文上の類似性を測定する方法はありますか?
2015 次
2 に答える
4
HPSGや LFGなどの深い文法を含む深い言語処理ツールの使用を検討したことがありますか? 機能ベースの構文の類似性を調べている場合は、PropBank を使用して動詞の構文上の類似性を計算し、類似した動詞をクラスタリングして HPSG 文法を改善することに関するKenji Sagae と Andrew S. Gordonの研究を見ることができます。
より単純なアプローチを行うには、依存関係の解析と、同じ解析ノードを持つグループ センテンスを調べることをお勧めします。または、単に POS タグの文章を並べて、同じ POS タグの文章を比較します。
簡単な例として、まず NLTK ( http://nltk.org/ ) と hunpos tagger ( http://code.google.com/p/hunpos/ ) をダウンロードしてインストールします。en_wsj.model.gz を解凍し、Python スクリプトがある場所に保存します。
import nltk
from nltk.tag.hunpos import HunposTagger
from nltk.tokenize import word_tokenize
s1 = "This is a short sentence"
s2 = "That is the same sentence"
ht = HunposTagger('en_wsj.model')
print ht.tag(word_tokenize(corpus))http://nltk.org/
# Tag the sentences with HunPos
t1 = ht.tag(word_tokenize(s1))
t2 = ht.tag(word_tokenize(s2))
#Extract only the POS tags
pos1 = [i[1] for i in t1]
pos2 = [j[1] for j in t2]
if pos1 == pos2:
print "same sentence according to POS tags"
else:
print "diff sentences according to POS tags"
上記のスクリプトは次を出力します。
>>> print pos1
['DT', 'VBZ', 'DT', 'JJ', 'NN']
>>> print pos2
['DT', 'VBZ', 'DT', 'JJ', 'NN']
>>> if pos1 == pos2:
... print "same sentence according to POS tags"
... else:
... print "diff sentences according to POS tags"
...
same sentence according to POS tags
上記のコードを変更するには、次を試してください。
- POS を比較する代わりに、依存関係解析を使用します
- 厳密なリスト比較の代わりに、違いのレベルを測定する統計的方法を考え出す
于 2013-03-05T03:04:31.380 に答える
1
Apache Luceneのようなものをお探しですか?
于 2013-03-03T21:24:53.753 に答える