2017-07-08 10 views
0

アイテム(文字列)の比較に関する他の質問がありますが、私の問題を解決する方法はありませんでした。リスト内のアイテムを比較して、Pythonの類似性を比較する速い方法

私は科学論文(タイトル、キーワード、抄録)のテキスト分析をしようとしています。私はテキスト中の単語の出現を数えたいと思う。コードは正常に機能しますが、リストの文字列を類似性と比較することで問題が発生します。 exのような言葉がたくさんあります。 "湿地"と "湿地"と私のコードは、それらを類似性のために比較し、それらを最初のもの( "湿地"が "湿地"になる)で置き換えている。

私の必要に応じて動作しますが、かなり遅いです。だから私の質問は、これのためのいくつかのより良い解決策がある場合です。

マイコード:

def similar_words(words_list): 
    checked_words = [] 
    similar = words_list 
    ind_a = 0 
    num_words = len(words_list) 
    print("from" + " " + str(num_words) + " " + "words") 
    for similar[ind_a] in similar: 
     if similar[ind_a] not in checked_words: 
      ind_b = 0 
      for word in similar: 
       match = SequenceMatcher(None, similar[ind_a], similar[ind_b]).ratio() 
       if match >= 0.85: 
        similar[ind_b] = similar[ind_a] 
       ind_b += 1 
      ind_a += 1 
     checked_words.append(similar[ind_a]) 
     stdout.write("\r%d words solved" % ind_a) 
     stdout.flush() 
    stdout.write("\n") 
    print("solved %d words for 85percent similarity" % num_words) 
    return similar 
+0

これは訪問するのに適した場所です:https://codereview.stackexchange.com/ –

+0

'checked_words = []'私はまずこれを 'set()'にします。単語リストのタイプによっては、同様の検索が高価になる可能性があります。 '類似の[ind_a]類似のものは本当に奇妙に見えますが、リスト上で反復しながらインデックスの値を再割り当てします。 – dhke

答えて

2

Python Natural Language Toolkittools for stemming and lemmatizationを持っています。おそらくあなたのコードよりも優れた性能を発揮します(そして「ホイールの再発明」をたくさん防ぎます)

+0

私はNLTKを知っていて、すでにそれを試していますが、これは役に立たなくなりましたが、結果に失望しました。車輪がすべて同じではないので、私は車輪を再発明しようとしている理由です。しかし、おそらく私はそれをもう一度試してみましょう。 –

関連する問題