使用Google App Engine Python搜索Api对波兰语进行词干分析

使用Google App Engine Python搜索Api对波兰语进行词干分析,python,google-app-engine,full-text-search,stemming,google-app-engine-python,Python,Google App Engine,Full Text Search,Stemming,Google App Engine Python,我试图在Google App Engine中使用Python搜索Api来搜索波兰文档集,我发现,词干分析功能并没有按预期工作 英语中的“red”一词只有一种形式,尽管波兰语中有不同的形式,基于性别、复数和大小写: 非复数: | | masculine | feminine | neuter | |--------------|------------|-----------|------------| | Nominative | czerwony

我试图在Google App Engine中使用Python搜索Api来搜索波兰文档集,我发现,词干分析功能并没有按预期工作

英语中的“red”一词只有一种形式,尽管波兰语中有不同的形式,基于性别、复数和大小写:

非复数:

|              | masculine  | feminine  | neuter     |
|--------------|------------|-----------|------------|
| Nominative   | czerwony   | czerwona  | czerwone   |
| Genitive     | czerwonego | czerwonej | czerwonego |
| Dative       | czerwonemu | czerwonej | czerwonemu |
| Accusative   | czerwony   | czerwoną  | czerwone   |
| Instrumental | czerwonym  | czerwoną  | czerwonym  |
| Locative     | czerwonym  | czerwonej | czerwonym  |
| Vocative     | czerwony   | czerwona  | czerwone   |
复数(中性与阴性相同):

正如你所看到的,波兰语中共有12种独特形式的“红色”:“czerwony”、“czerwonym”、“czerwonego”、“czerwonemu”、“czerwona”、“czerwonej”、“czerwonej”、“czerwone”、“czerwoni”、“czerwonymi”、“czerwonych”、“czerwonymi”

我希望从谷歌应用程序引擎stemmer中得到的是,将它们都视为相同的(即“红色”)。让我们通过将端点添加到应用程序引擎应用程序来测试它,其操作如下:

    def test_me():
        forms = {'czerwony', 'czerwonym', 'czerwonego', 'czerwonemu',
                     'czerwona', 'czerwoną', 'czerwonej',
                     'czerwone', 'czerwoni', 'czerwonymi', 'czerwonych',
                     'czerwonym'}

        # turn each form into document and insert to index
        index = search.Index(name=str(uuid.uuid4()))
        index.put([search.Document(language='pl',
                                   fields=[
                                       search.TextField(name='color', value=form,  language='pl')
                                   ])
                   for form in forms])

        missing = {}
        for form in forms:
            # find out what forms can we match to 'form' using ~ stemming operator
            results = index.search(query="~" + form).results
            matching_forms = set([doc.field('color').value for doc in results])

            # and see which we missed
            missing[form] = list(forms - matching_forms)

        return json.dumps(missing)
结果发现有很多项目没有正确匹配:

"czerwonym": [
  "czerwona",
  "czerwoną",
  "czerwoni",
  "czerwonych",
  "czerwonej",
  "czerwonymi",
  "czerwonemu"
],
"czerwonemu": [
  "czerwona",
  "czerwoną",
  "czerwone",
  "czerwoni",
  "czerwonych",
  "czerwonej",
  "czerwonego",
  "czerwony",
  "czerwonym",
  "czerwonymi"
],
...
我做错什么了吗?或者我对GAE stemmer有错误的期望

请注意,有一个开源的波兰词干分析器(),它可以处理所有12个表单,没有任何问题。这让我相信,我对GAE stemmer的期望并不过分

"czerwonym": [
  "czerwona",
  "czerwoną",
  "czerwoni",
  "czerwonych",
  "czerwonej",
  "czerwonymi",
  "czerwonemu"
],
"czerwonemu": [
  "czerwona",
  "czerwoną",
  "czerwone",
  "czerwoni",
  "czerwonych",
  "czerwonej",
  "czerwonego",
  "czerwony",
  "czerwonym",
  "czerwonymi"
],
...