問題タブ [lemmatization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nlp - ステマーとレマタイザー
特に英語の自然言語処理 (NLP) は、「完全な」レンマタイザーが存在する場合、ステミングが古風なテクノロジになる段階に進化しました。これは、ステマーが単語/トークンの表面形状を無意味な語幹に変更するためです。
この場合も、「完全な」レンマタイザーの定義には疑問があります。NLP タスクが異なれば、異なるレベルのレンマタイゼーションが必要になるからです。たとえば、動詞/名詞/形容詞の形の間で単語を変換します。
ステマー
レマタイザー
問題は、今日、英語のステマーは役に立っているのかということです。英語の見出し語化ツールはたくさんあるので
nounify
そうでない場合、 、verbify
、adjectify
およびadverbify
前処理を行うことができる堅牢なレンマタイザーを構築するにはどうすればよいでしょうか?見出し語化タスクは、英語と同様の形態学的構造を持つ他の言語にどのように簡単にスケーリングできますか?
c# - Solr でのステミング クエリ
ファジー、シノニム、ステミングなどの高度な検索機能をサポートする C# の Solrnet ライブラリを使用する Solr ベースの検索システムがあります。これらはすべて機能しますが、ステミング検索から期待されるのは、縮小によるステミングと拡張によるステミングの組み合わせであり、単語の文法上のバリエーションをカバーするようです。ユースケースはそれをより明確にします:
- fish を検索すると、fishing も見つかります
- 「適用済み」を検索すると、「適用中」、「適用中」、および「適用中」も検索されます。
SnowballPorterFilterFactory で CopyField を使用してステミングを実装しました。その結果、burningを検索すると、 burningとburnの結果が返されますが、 Burnを検索すると、 burning、burnt、またはburnの結果が返されません。
すべてのステマーが Lucene/Solr をサポートしており、すべて縮約によるステミングを使用しているため、これについてどうすればよいかわかりません。Solr Wikiによると:
ステミングに関連する技術は見出し語化です。これにより、展開による「ステミング」が可能になり、ルート ワードを取得して、それをさまざまな形式のすべてに「展開」できます。見出し語化は、挿入時またはクエリ時に使用できます。Lucene/Solr には見出し語化のサポートが組み込まれていませんが、独自の辞書と SynonymFilterFactory を使用してシミュレートできます。
Solr でこれを行う方法が正確にはわかりません。何か案は。
また、C# ベースのステマー/レンマタイザー ライブラリを使用して語根を取得し、WordNet などの公開データベースを使用して語幹のさまざまな文法バリエーションを抽出し、これらすべての用語を送信して Solr でクエリすることも考えていました。安定した C# ステマー/レンマタイザーと WordNet C# API を見つけるための調査はまだ行っていませんが、これは複雑になりすぎて、Solr 内から実行する方法が必要になると思われます。
Solr スキーマの関連部分:
ドキュメントのインデックスを作成すると、コンテンツは Content フィールドにそのまま保存され、テキスト ベースの検索とステミング検索のためにそれぞれ ContentSearch と ContentSearchStemming にコピーされます。そのため、ContentSearchStemming フィールドには語幹/短縮形が格納されます。Luke と Admin Schema Browser --> Term Info でこれを確認しました。管理者分析画面でテストしたところ、テキスト「burning」にインデックスを付けると、「burn」に縮小されて保存されることがわかりました。ここまでは順調ですね。
UIで、
- ユーザーが用語「burn」を入力し、ステミング オプションをチェックするとします。ユーザーがステミングを指定しているため、結果は用語「burn」および語幹を持つすべての用語に対して返されるはずです。 「やけど」つまり、やけど、やけど、火傷など。
- ユーザーが「書き込み」という用語を入力し、ステミング オプションをチェックするとします。ユーザーがステミングを指定しているため、"burning" という用語と、"burn" という語幹を持つすべての用語 (burn、burn、burns など) の結果が返されることが期待されます。
Solr に送信されるクエリ:
デバッグ情報から:
そのため、結果が返されたとき、同じドキュメントに書き込みや書き込みなどの用語が含まれていても、「書き込み」という用語で強調表示されたヒットのみが表示されます。
ステミングは次のように機能するはずだと思いました。
- queryanalyzer チェーンのステミング フィルターは、入力単語をその語幹に減らします。燃焼 --> 燃焼
- クエリ コンポーネントは、用語をスキャンし、用語の語幹と入力用語の語幹との間に一致が見つかった用語を照合する必要があります。火傷 --> 火傷 (マッチ) 火傷 --> 火傷
最初のポイントが発生しています。しかし、ステム「burn」との正確なテキストベースの一致の検索を実行しているようです。したがって、火傷または火傷は返されません。
私が自分自身を明確にすることができたことを願っています。
c# - Lucene.NET で複数形を削除するには?
テキストからいくつかのキーワードを抽出しようとしています。それは非常にうまく機能しますが、複数形を削除する必要があります。
私はすでにLuceneを検索目的で使用しているので、それを使用して索引付けされた用語からキーワードを抽出しようとしています。
まず、ドキュメントを RAMDirectory インデックスでインデックス付けします。
次に、キーワードを抽出します。
用語のリストには、「大統領」や「大統領」などの用語を含めることができますが、
どうすれば削除できますか?
私のCustomStandardAnalyzerはこれを使用します:
そのため、私はすでに SnowballFilter を使用しています (正しい言語固有のステマーを使用)。どうすれば複数形を削除できますか?
python - NLTK 単語の見出語化
で単語の見出し語化を試みていますNLTK
。
私が今見つけたのは、stem
パッケージを使用して、「車」を「車」に、「女性」を「女性」に変換するなどの結果を得ることができるということですが、「確認」などの接辞を含むいくつかの単語について見出し語化を行うことはできません。
WordNetLemmatizer()
on "acknowledgement"を使用すると "acknowledgement" を返し、 を使用.PorterStemmer()
すると "acknowledge" ではなく "acknowledg" を返します。
単語の接辞を削除する方法を誰か教えてもらえますか?
たとえば、入力が「確認」の場合、出力は「確認」になります。
nltk - NLTK での非構造化テキストのステミング
正規表現ステマーを試しましたが、何百もの無関係なトークンが得られます。私はただ「遊び」の幹に興味があります。ここに私が取り組んでいるコードがあります:
上記の結果は次のとおりです。
ファイルをクリーンアップ.txt
し(すべて小文字にする、ストップワードを削除するなど)、単語の複数のスペルを1つに正規化し、頻度分布/カウントを実行しようとしています。方法は知っていますFreqDist
が、ステミングのどこが間違っているかについての提案はありますか?
python - Python 正規表現のいずれかまたはケース
単語の補題とその複数形を取得する小さなモジュールがあります。次に、両方の単語 (単数形または複数形) をいずれかの順序で含む文を探して文を検索します。私はそれを機能させましたが、この表現を構築するためのよりエレガントな方法があるかどうか疑問に思っていました. ありがとう!注: Python2
次に、検索:
python - 英語以外の単語の見出し語化?
見出し語化を適用して、単語の屈折形を減らしたいと思います。英語の場合、WordNet がそのような機能を提供することは知っていますが、オランダ語、フランス語、スペイン語、イタリア語の単語の見出し語化にも興味があります。これについて信頼できる確認された方法はありますか?ありがとうございました!