2010-09-10 70 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), 
)