2012-02-17 9 views
3

私は物事のデータベースを持っていますが、それぞれが異なる言語で複数の名前を持つことができます。非正規化混在言語文書用のSolr言語検出更新プロセッサー

things 
------ 
id 
... 

names 
----- 
id 
thing_id 
language 
name 

私はこの使用してSolrのインデックスを作成していますし、Luceneのスキーマにこれを非正規化するための最良の方法を把握しようとしています:これは事がある - 多くの名スキーマに現在規格化されています。この1は大丈夫作品:

<fields> 
    <field name="id" type="uuid" indexed="true" stored="true" required="true" /> 
    ... 
    <field name="name_eng" type="text_eng" indexed="true" stored="true" /> 
    <field name="name_jpn" type="text_cjk" indexed="true" stored="true" /> 
    <field name="name_kor" type="text_cjk" indexed="true" stored="true" /> 
</fields> 

問題は、私が個別にサポートされている各言語のフィールドとフィールドタイプを指定する必要があるということです、そして多くがあるかもしれません。私もSQL DataImportHandlerを使用しているので、データベースからこのスキーマにインポートするためにSQLクエリを指定するために多くのコードを複製する必要があります。さらに、名前のlanguageフィールドは、ユーザーの入力に基づいているため、必ずしも正しいとは限りません。

私はlanguage detection capabilities Solrの提供を見ていましたが、これは非常によく見えます。しかし、彼らは文書全体でしか動作しないように見えます。この場合は、私が推測することを多分助けません。名前を格納できるスキーマに単一のmultiValuedフィールドを指定する方法はありますか?その言語は自動的に検出され、それに応じて索引付けされますか?または、言語検出機能が私の人生をここで楽にすることができる他の方法?

答えて

0

おそらく、インデックス側でそれを行うトランスフォーマを書くことはできますが、クエリ側では同じ解析チェーンが得られないため、動作しません。

これらの「もの」のテキストはどのように見えますか?

約200文字未満の場合、言語IDはうまく動作しません。それを統計的アプローチで「言語推測」と考えてください。少量のデータでは推測は悪いです。英語かデンマーク語ですか?どちらも、本当に。 "Die"は英語とドイツ語などです。良い推測のために、1000文字が役に立つでしょう。

テキストの商標はありますか? 「LaserJet」と「Linux」はすべての言語で同じで、ほとんど使用されないため、言語処理は何もしません。たぶん、あなたは言語特有のステミングを受けることなく乗り越えることができます。

最後に、言語処理の代わりにnグラムを考慮する可能性があります。これは言語に敏感なマッチングとはまったく異なるモデルですが、これでうまくいくかもしれません。ある意味では、言語IDと同じ種類の統計パターンマッチングを実行していますが、インデックス時ではなく照会時に行います。クエリから短いパターンのシーケンスを取り出し、テキスト内のパターンを探します。より多くの時間と空間が必要ですが、試してみる価値があります。