4

検索用にテキストをトークン化する方法に関する戦略と、それらを実装する方法に関するいくつかのアイデアを探しています。

具体的には、ユーザーが生成したビジネスレビューをトークン化して、ビジネス検索エンジンを支援しようとしています。すべてのコードはPythonです。

少なくとも次のことを行う必要があると思います。

  • 複数名詞を単数形に変換するこれがうまくいくように見えるinflect
    という ライブラリを見つけましたが、誰かがそれを使った経験はありますか?

  • 英数字以外のすべての文字
    を削除するこれは私にとって正規表現の仕事のようですが、他の提案を聞きたいです

  • 空白に基づいてトークン化し、連続する空白を単一の空白に変換する
    これはPythonのカスタム文字列操作で実行できると思いますが、もっと良い方法があるかもしれません。

テキストをトークン化するために私がしなければならないことについて、他に誰かアイデアがありますか?また、上記の戦略を実装するために言及された手法とツールについてどう思いますか?

背景情報:(コメントからDough TSolrまたはElasticsearchに関する提案まで)ElasticSearch
を使用しており、そのツールを使用して基本的なトークン化を行っています。トークン化後、テキストから意味を抽出するためにかなり複雑なセマンティック分析を適用する必要があるため、上記のトークン化を個別に実行します。指定方法を正確にトークン化する柔軟性と、トークンに独自のデータ注釈を付けて独自の形式でトークンを保存できるという利便性が必要です。
絶対に必要なものの1つは、トークンごとに1つの(大きな)データベースレコードであり、その場でアクセスおよび変更でき、そのトークンの使用法に関連するすべてのものが含まれています。ESトークン化を使用して、ドキュメントのインデックスが作成されるときにそれらを処理することは除外されていると思います。ESの分析モジュールを使用して、インデックスを付けずにテキストを分析し、トークンのデータベースレコードを構築/更新するために、各トークンを個別に処理することもできます...このアプローチに関する提案を求めています。

4

1 に答える 1

5

Pythonで独自のものを実装するのではなく、説明した機能を提供する全文検索ソリューションを検討したいと思います。この分野における 2 つの大きなオープンソース プレーヤーは、elasticsearchsolrです。

これらの製品を使用すると、カスタム トークン化、句読点の削除、検索を支援するシノニム、空白以外のトークン化などを定義するフィールドを構成できます。プラグインを簡単に追加して、この分析チェーンを変更することもできます。

これは、いくつかの便利なものを含む solr のスキーマの例です。

フィールド タイプの定義

<fieldType class="solr.TextField" name="text_en" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>-->
    <filter catenateAll="0" catenateNumbers="1" catenateWords="1" class="solr.WordDelimiterFilterFactory" generateNumberParts="1" generateWordParts="1" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
  </analyzer>
 </fieldType>

フィールドを定義する

<field indexed="true" name="text_body" stored="false" type="text_en"/>

その後、python を介して優れた REST API を介して検索サーバーを操作するか、Solr/Elasticsearch を直接使用することができます。

于 2012-11-15T17:57:40.433 に答える