0

2 つの単語の発音が似ているかどうかを判断するために、ネストされた for ループを作成しています。私のコードは以下のようなものです:

wordsDict = nltk.defaultdict(list)
for s1 in prondict[word1]:
    for s2 in prondict[word2]:
        sm=difflib.SequenceMatcher(None, s1, s2)
            if (sm.ratio != 1 and sm.ratio >= 0.6):
                #push word2 into the dict with key word1
                wordsDict[word1].append(word2)

結果は、wordsDict という名前の辞書になります。たとえば、キー "university" は、音素が類似しているため (sm. ratio が 0.66666 で 0.6 より大きい)、値 "anniversary" を持ちますが、入力が "university" と "good" の場合、"good" はキー「大学」にも追加されますが、実際には「大学」と「良い」の類似度は 0.0 で、0.6 未満です。私の「if」制御ステートメントが失敗したようです。「if」ステートメントを機能させるにはどうすればよいですか?

4

1 に答える 1

2

問題は、あなたの使い方にありますsm.ratiosm.ratio関数です。あなたが求めている値を取得するには、それを呼び出してみてください:sm.ratio()

In [77]: sm = difflib.SequenceMatcher(None, "university", "anniversary")

In [78]: sm.ratio
Out[78]: <bound method SequenceMatcher.ratio of <difflib.SequenceMatcher instance at 0x104d00488>>

In [79]: sm.ratio()
Out[79]: 0.6666666666666666
于 2013-07-10T04:05:09.143 に答える