NLPを使用して文法に基づいて比較する2つの文があります。私はNLPを全く新しくしており、これを決定するアルゴリズムがあるかどうかを知りたいと思っています。私は、単語の類似性と感情を使って比較する方法を知っています。NLPを使用して文法に基づいて2つの文を比較する
0
A
答えて
0
あなたはここに2つの文
間の類似性を測定するためNLTKのWordNetののsynsetを使用することができますが、文法を指定することなく、すべての可能なのsynsetを生成する方法で、後で特定の基準に基づいて使用するのsynsetを選択でき
ここでimport pandas as pd
import nltk
from nltk.stem.porter import PorterStemmer
from nltk.corpus import wordnet as wn
import itertools
#use stemmer
stm = PorterStemmer()
sent1 = "I like hot dogs"
sent2 = "My father's favourite food is hot dog"
#Convert the tag given by nltk.pos_tag to the tag used by wordnet.synsets
tag_dict = {'N': 'n', 'J': 'a', 'R': 'r', 'V': 'v'}
s1 = nltk.pos_tag(nltk.word_tokenize(sent1))
s1 = dict(filter(lambda x: len(x[1])>0,
map(lambda row: (row[0],wn.synsets(
stm.stem(row[0]),
tag_dict[row[1][0]])) if row[1][0] in tag_dict.keys()
else (row[0],[]),s1)))
s2 = nltk.pos_tag(nltk.word_tokenize(sent2))
s2 = dict(filter(lambda x: len(x[1])>0,
map(lambda row: (row[0],wn.synsets(
stm.stem(row[0]),
tag_dict[row[1][0]])) if row[1][0] in tag_dict.keys()
else (row[0],[]),s2)))
は、ここに1つの方法です
dogs [Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n...
hot [Synset('hot.a.01'), Synset('hot.s.02'), Synset('hot.a.03'), Synset('hot.s.0...
like [Synset('wish.v.02'), Synset('like.v.02'), Synset('like.v.03'), Synset('like...
S1辞書内の値のサンプルです。ここでは、2つの単語のすべての可能なsynsetの間の類似性を測定し、最大値を取る。
{('dogs', 'dog'): 1.0,
('dogs', 'father'): 0.16666666666666666,
('dogs', 'food'): 0.25,
('dogs', 'is'): 0.10000000000000001,
('hot', 'hot'): 1.0,
('hot', 'is'): 0.33333333333333331,
('like', 'is'): 0.33333333333333331}
res = {}
for w2,gr2 in s2.items():
for w1,gr1 in s1.items():
tmp = pd.Series(list(map(lambda row: row[1].path_similarity(row[0]),
itertools.product(gr1,gr2)))).dropna()
if len(tmp)>0:
res[(w1,w2)] = tmp.max()
print(res)
出力は、今、私たちは、文中の各単語が達成最大の類似性を見つけます。その後、平均を取る
similarity = pd.Series(res).groupby(level=0).max().mean()
print(similarity)
出力は文書の類似性を測定する場合.778
上記の一般的なアプローチです。文法を比較しようとしている場合は、pos_tag(またはnltk.corpus.brown.tagged_words()
のようなタグ付きコーパスを両方のセンテンスのようなA品詞タグを使用して、タグ間のJaccard距離を見つけることができます。
+0
ご返信ありがとうございます、ありがとうございます!これは私が必要なものです。以前はsynsetを使っていましたが、個々の単語を比較するために、synsetを使って文を比較する方法はわかりませんでした。 –
関連する問題
- 1. 条件に基づいて2つのIqueryableを比較する
- 2. キーと文字列に基づいて2つのファイルを比較する方法+ awk
- 3. perlとphpの日付と時刻に基づいて2つの文字列を比較するには?
- 4. 分のdatetimeに基づいて2つのファイルを比較する?
- 5. 共通IDに基づいてMySQLの2つのテーブルを比較する
- 6. 2つの文書を比較する
- 7. エラーマージンを使ってJavaの2つの文字列を比較する方法
- 8. 再帰を使用した2つの文字列の比較
- 9. casperjsを使用して2つの文字列を比較してアサートする方法
- 10. NavigableMap - 値に基づいて比較
- 11. 文字列比較、私は2つの文字列を比較しています
- 12. MySQLのトリガー構文エラー(2つのテーブルに基づいて、ifステートメントを使用)
- 13. Mysqlは2つの基準に基づいてテーブルを注文します
- 14. 2つの列を比較して文字の違いを識別するR
- 15. 比較文字列サイズを比較文字の代わりに使用していますか?
- 16. ユニットテスト中のIDに基づいてエンティティを比較します
- 17. 2つのデータストリームの比較結果に基づいてpentaho-更新フラグ値
- 18. 2つの文字列を比較して類似度を求める方法
- 19. awkは文字列の比較に基づいて2つの列を持つ2つのファイルを結合しました
- 20. jQueryを使用して2つの日付を比較する
- 21. Assert.AreEqual()を使用して2つのオブジェクトを比較する
- 22. ラムダ式を使用して2つのリストを比較する
- 23. Perlを使用して2つのディレクトリを比較する
- 24. mySQLを使用して2つのテーブルを比較する
- 25. perl md5を使用して2つのファイルを比較する
- 26. PowerPivotを使用して2つのデータセットを比較する
- 27. forループを使用して2つのデータフレームを比較する
- 28. InStrを使用して2つの列を比較する
- 29. DataAnnotationsを使用して2つのモデルプロパティを比較する
- 30. Javaを使用して2つのXMLペイロードを比較する
「彼らの文法に基づいて比較する」 もう少し詳しいことを教えてください。多分例を挙げて? –
私は「私はホットドッグが好きです」と「私の父の好きな食べ物はホットドッグです」という文章があるとします。今度は、これら2つの文章を、NLPを使って文法の面でどれほど似ているかを比較したいと思います。 –
あなたは何をよく知っているのですか?または一般的な形容詞ですか?または依存関係の構文解析の構造、構造の共通性 –