1. ホーム
  2. java

Porter StemmingアルゴリズムとLancaster Stemmingアルゴリズムの大きな違いと利点は何ですか?[クローズド]

2023-08-08 22:38:16

質問

私はjavaで文書分類のタスクに取り組んでいます。

両方のアルゴリズムが高く評価されましたが、それぞれの利点と欠点は何ですか?また、自然言語処理タスクの文献ではどちらがより一般的に使用されているのでしょうか?

どのように解決するのですか?

基本的なことですが、Porter と Lancaster のステミングアルゴリズムの主な違いは、Lancaster ステマーが Porter ステマーよりかなり積極的であるということです。現在使用されている 3 つの主要なステミングアルゴリズムは、Porter、Snowball (Porter2)、Lancaster (Paice-Husk) で、攻撃性の連続性は基本的にこれらに沿っています。ポーターは最も攻撃的でないアルゴリズムで、各アルゴリズムの詳細はかなり長くて専門的です。ここでは、その内訳を説明します。

Porter: 間違いなく最も一般的に使用されるステマーで、最も穏やかなステマーの 1 つです。数少ないステマーの 1 つで、Java をサポートしていることも利点ですが、アルゴリズムの中で最も計算量が多くなります (大きな差はありませんが)。また、大差で最も古いステミングアルゴリズムです。

Porter2。Porter の改良版としてほぼ一般的に評価されていますが、それには理由があります。Porter自身、彼の元のアルゴリズムより優れていると認めています。ポーターよりわずかに速い計算時間で、かなり大きなコミュニティがあります。

Lancaster。非常に積極的なステミングアルゴリズムで、時には欠点もあります。porter と snowball では、ステム処理された表現は通常、読者にとってかなり直感的ですが、Lancaster ではそうではなく、多くの短い単語は完全に難読化されます。最速のアルゴリズムで、単語の作業セットを大幅に削減できますが、より区別したい場合は、このツールを使用する必要はありません。

正直なところ、Snowballは通常行くべき道であると感じています。Lancaster が作業セットを大幅に削減する特定の状況があり、それは非常に便利ですが、私の意見では、Snowball よりもわずかな速度向上は、正確さの欠如に見合うものではありません。Porterは最も多くの実装があるので、通常はデフォルトで使用されるアルゴリズムですが、可能であれば、snowballを使用してください。

雪だるま - 追加情報

雪だるま は小さな文字列処理言語であり、情報検索のためのステミングアルゴリズムを作成するために設計されています。 ステミングアルゴリズムを作成するために設計された小さな文字列処理言語です。

Snowball コンパイラは、Snowball スクリプトを他の言語 - 現在では ISO C#, Go, Java, Object Pascal - に翻訳します。 現在、ISO C、C#、Go、Java、Javascript、Object Pascal、Python、Rust がサポートされています。 Python および Rust がサポートされています。

名前の歴史

<ブロッククオート

suffix STRIPPER GRAMmar "を提供することから、"strippergram "と呼ぶことも考えていました。 しかし、良識が勝ったので、「Snowball」と名付けました。 SNOBOLへのオマージュとして'Snowball'と名付けました。 ファーバー、グリスウォルド、ポアジ、ポロンスキーの各氏が1960年代に開発した優れた文字列処理言語であるSNOBOLに敬意を表して、「スノーボール」と名付けた。 の4人が1960年代に開発した優れた文字列処理言語であるSNOBOLに敬意を表して、「Snowball」と命名しました。

---マーティン・ポーター

Snowball 言語で実装されたステマーは、単に Snowball ステマーと呼ばれることもあります。たとえば、Natural Language Toolkit を参照してください。 nltk.stem.snowball .