2010-09-10 17 views
2

歐洲很多語言都是變形的。這意味着一個單詞可以用多種形式寫在文本中。例如,在波蘭的「電腦服務」字「計算機」有多種形式:「komputera」,「komputerowi」,「komputerem」,「komputery」等。Django + Haystack +飛快移動:如何處理語言變形

我應該如何使用Django +草垛+嗖正確處理語言轉折?

每當我搜索任何形式的「komputer」,「komputera」,「komputerowi」我的意思是同樣的事情 - >「komputer」。

在NLP中,基於詞幹(裁減後綴)的基本方法是將表單轉換爲基本形式(「komputerowi」=>「komputer」)。有一些圖書館可以提供幫助。

我的第一個想法是準備一些特殊的模板過濾器,它將給定變量中的每個識別的單詞轉換爲帶有基本形式而不是形式的文本。然後我可以在django + haystack的搜索索引模板中使用它。如果搜索查詢也會在轉換之前轉換爲whoosh引擎,這應該很好。見例如:

haystack search index template: 
    {{some_indexed_text|convert_to_base_form_filter}} 

text to index: "Nie ma komputera" => "Nie ma komputer" <- this is really indexed 
search query: "komputery"   => "komputer" <-- this will match 

但我不認爲這是這個問題的「優雅」的解決方案,也有一些其他功能將無法正常工作 - 像提示拼寫錯誤的建議。

那麼 - 我該如何解決這個問題?也許我應該使用其他搜索引擎而不是whoosh?

回答

4

我有一個非常類似的問題,所以我希望我可以幫忙。

默認情況下,默認情況下,Whoosh已經只能輸入英語。
爲了實現詞幹爲另一種語言,第一往裏:

/your_path_to_whoosh/whoosh/lang/analysis.py 

這是StemmingAnalyzer(默認分析器)被定義和一個很好的起點。該stem功能,從porter.py進口,是在看其他的重要場所

所以,這三個步驟是:

  • 實現自己所產生的功能,以作爲參考波特的腦幹功能.py和任何語法和語言參考,您將需要獲得正確的規則。

  • analysis.py內部實施自己的分析儀,參考StemmingAnalyzer。該文件有大量文檔記錄,因此您不應該通過它進行導航。您會看到StemmingAnalyzer基本上是一個Tokenizer的鏈接,它帶有一個正則表達式來匹配單詞,小寫過濾器和基本上稱爲上述詞幹函數的詞幹過濾器。您會看到StemFilter將詞幹函數作爲參數,因此您不必重新實現該過濾器。

  • 傳遞你的品牌新的分析功能,在架構創建時間,在這裏看到:http://files.whoosh.ca/whoosh/docs/latest/schema.html#creating-a-schema

我希望這有助於!

+0

謝謝!我根本不知道誰有這個詞根。 – thedk 2010-10-10 15:12:06

+1

不幸的是,該鏈接不再工作 – Rost 2012-12-06 13:15:54

3

對於未來的讀者:Whoosh可以處理與雪球stemmer不同的語言。

from whoosh.lang.snowball.russian import RussianStemmer 
stemmer_ru = RussianStemmer() 
analyzer = StemmingAnalyzer(stemfn=stemmer_ru.stem) 
schema = fields.Schema(
    name=fields.TEXT(analyzer=analyzer), 
)