ブランド名(Coca-Cola、Pepsi、7Upなど)が含まれているテキストのリストがあります。私は同じコンテンツ(同じテキスト、小文字の全テキストの後ろ)を持つすべてのセルをソートしてカウントし、各テキストの数によってリストを並べ替えるPythonスクリプトを書いたので、最も出現するテキストが最初に表示され、なぜなら、ほとんどの人がブランド名を正しく書いてくれると私は考えているからです。たとえば 私は次のリストを持っている場合:ブランド名と一致するように文字列を比較し、スペルミスを削除します
texts = ['Coca-Cola', 'Pepsi', 'Coca-Cola', 'Coca-Cola', 'Pepsi', 'Pespi', 'Pepsi', '7Up', '7up', 'Cola', 'Pepsi']
最初のステップの後のリストは次のようになります。
ordered_text = [
{'text': 'Pepsi', count: 4},
{'text': 'Coca-Cola', count: 3},
{'text': '7Up', count: 2},
{'text': 'Cola', count: 1},
{'text': 'Pespi', count: 1},
]
第二段階では、私がしようと近づくと一致するようにngramパッケージを使用していますスペルミスを修正するためのテキスト。 重要な注記:私の主な要求の1つは、言語に不可知の解決策を用意することです。
私の問題は、長いテキストではうまく動作しますが、短いテキストではうまくいきません。たとえば、実行している場合:
ngram.NGram.compare('Pepsi', 'Pespi')
は、結果は次のようになります。非常に低い「スコア」をですが、あなたが見ることができるように、文字列が本当に近く、唯一の1文字がある
0.2727272727272727
こと配置が間違っています。
Relustを改善するにはどうすればよいですか?私は別のアルゴリズムを使用する必要がありますか?あるいは、このテストに異なるパラメータを指定することはできますか?私が見つけたすべての「新しい」単語を含む辞書を追加して追加した後、それぞれの単語をそれと比較することができますが、スクリプトの細かさは失われます。
タイプミスの場合、[levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance)は機能しますか? – Aufziehvogel
おそらく「低=良い」ですか?とにかく、私は個人的にはスペルチェックにLevenshtein距離を使うのが好きです。例えば、「ミスプレイド」対「ミスプレイス」のLDは「2」である。単語の長さで割ると、2/9になります。これはかなり近いです。 – usr2564301
'NGRAM'では、スコアを1に近づけたいと思っています。つまり、文字列は同じです。 私は一般的に、NGRAMアルゴリズムを実行し、levenshtein距離を試して実行するのに一致するものが見つからなかった場合、またはこの場合にlevenshtein距離を使用するのが最善であると思いますか? –