1

ブランド名 (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},
]  

2 番目のステップでは、ngramパッケージを使用して、スペルミスを修正するために、より近いテキストを一致させようとしています。重要な注意: 私の重要な要求の 1 つは、言語にとらわれないソリューションを用意することです。

私の問題は、NGRAM が長いテキストではうまく機能するが、短いテキストではパフォーマンスが悪いことです。たとえば、実行時:

ngram.NGram.compare('Pepsi', 'Pespi')

結果は次のようになります。

0.2727272727272727

これは非常に低い「スコア」ですが、ご覧のとおり、文字列は非常に近く、位置が間違っている文字は 1 つだけです。

嫌悪感を改善するにはどうすればよいですか?別のアルゴリズムを使用する必要がありますか? それとも、このテストに別のパラメーターを指定しますか? 私が見つけたすべての「新しい」単語を含む辞書を追加して追加することを考えました。その後、各単語を比較できますが、スクリプトの粒度が失われます。

4

1 に答える 1

1

入力の正確さをスペルチェックしたいのか、それとも単にグループ化したいのか、あなたの質問からは明らかではありません。たとえば、入力が のよう['coka-cola', 'coak-cola', 'coca-coca']に見える場合、アルゴリズムは何をすべきでしょうか?

  • それらをすべてグループ化する必要があり{'coka-cola': 3}ますか?常に入力を最初の発生と比較するという意味ですか? この場合、編集距離は理にかなっています。このための多くの Python 実装を簡単に見つけることができます。

  • 正しいスペルでそれらをグループ化する必要があり{'coka-cola': 3}ますか? この場合、優れたスペル修正プログラムが必要です。ここにはいくつかのオプションがあります。オートコレクトパッケージを見るか、より複雑なソリューションであるNLTKパッケージを見ることができます。別のオプションは、Google を使用することです。スペルを修正するために Google からサポートされている API はないと思うので、Google にリクエストを発行するときに提案された結果を取得するには、スクレイピングを行う必要があります。

于 2016-11-20T11:27:59.583 に答える