当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch西班牙语词干生成不使用“rojo”颜色

卢伟志
2023-03-14

我对ElasticSearch相当陌生。我试图用西班牙语分析输入,但颜色“rojo”(西班牙语中的红色)似乎有问题。

根据词干演示,字符串Polera颜色rojo(红色衬衫)应该词干为Poler颜色roj,Polera roja(红色衬衫)应该是poler roj,使我能够搜索为rojo或roja,并获得两个结果。

我在Kibana的控制台中用以下代码初始化了索引:

PUT /test
{
  "settings": {
    "analysis": {
      "filter": {
        "spanish_stop": {
          "type": "stop",
          "stopwords": "_spanish_"
        },
        "spanish_stemmer": {
          "type": "stemmer",
          "language": "spanish"
        }
      },
      "analyzer": {
        "default_search": {
          "type":"spanish",
          "filter": [
            "lowercase",
            "spanish_stop",
            "spanish_stemmer"
          ]
        }
      }
    }
  },
  "mappings":{
    "properties":{
      "fullname":{
        "type":"text",
        "analyzer":"default_search"
      }
    }
  }
}

并使用以下代码进行了查询:

POST /test/_analyze
{
  "analyzer": "default_search",
  "text": "polera color rojo"
}

我收到的答复如下:

{
  "tokens" : [
    {
      "token" : "poler",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "color",
      "start_offset" : 7,
      "end_offset" : 12,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "rojo",
      "start_offset" : 13,
      "end_offset" : 17,
      "type" : "<ALPHANUM>",
      "position" : 2
    }
  ]
}

正如你所看到的,“polera”被正确地定义为“poler”,但“rojo”不是。我还尝试了其他颜色和东西,添加了更多的文本,等等。但问题似乎与“rojo”有关。

我设法在AWS中的Elasticsearch实例和本地实例中复制了这个问题。它确实适用于复数形式,如“rojas”和“rojos”,将它们保留为“roj”。

也许我配置错了,或者这实际上是Elasticsearch中西班牙语词干的问题?

编辑:似乎问题在于字长?同样的问题也发生在“coma”和“como”上,它们的词干应该是“com”,但不是。如果我把“comas”放进去,它的词干应该是“com”。

共有1个答案

宇文和昶
2023-03-14

看起来像词干类型有一个最小的令牌lengh,我尝试用"rojos"代替"rojo"和词干"roj"。

您可以尝试另一种方法,如雪球词干

PUT /test_spanish
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "filter": [ "lowercase", "my_snow" ]
        }
      },
      "filter": {
        "my_snow": {
          "type": "snowball",
          "language": "Spanish"
        }
      }
    }
  }
}
POST /test_spanish/_analyze
{
  "analyzer": "my_analyzer",
  "text": "polera color rojo"
}
{
  "tokens" : [
    {
      "token" : "poler",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "color",
      "start_offset" : 7,
      "end_offset" : 12,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "roj",
      "start_offset" : 13,
      "end_offset" : 17,
      "type" : "<ALPHANUM>",
      "position" : 2
    }
  ]
}
 类似资料:
  • 问题内容: 我正在尝试学习如何使用NLTK标记西班牙语单词。 从nltk的书中,使用它们的示例标记英语单词非常容易。因为我是nltk和所有语言处理的新手,所以我对如何进行程序感到很困惑。 我已经下载了语料库。有没有办法指定一个语料库。我看了看文档,没有发现任何建议。我觉得我缺少一些关键概念。我是否需要在cess_esp语料库中手动标记文本中的单词?(通过手动,我的意思是标记我的情感,然后再次运行语

  • 我使用HtmlCleaner库来解析/转换java中的HTML文件。 似乎无法处理像“Áák NUÍíNU NU NU NU NU”这样的西班牙语字符 我可以在HtmlCleaner中设置任何属性来处理此解决方案或任何其他解决方案吗?这是我用来调用它的代码:

  • 绝影是在宾馆里首先见到BOSSLiu的,见面第一句话他正要问:“BOSS啊,最近有啥研究成果没有?拿出来分享分享。”哪晓得这次被BOSSLiu抢了先,只不过这次他万分激动地说:“BOSS啊,我发现现在金子遍地都是,剩下的就是如何去拣了!” BOSSLiu一改往日的习惯,这反而让绝影不知如何应对了。比如写程序,以前习惯用_snprintf,现在突然又冒出个_snprintf_s来,一时间竟不知道从哪

  • 我是新来的,想知道是否有人能帮我解决以下问题。 我正在用西班牙语和斯坦福大学的CoreNLP对文本进行情感分析,但没有得到积极的结果。 也就是说,如果我分析任何英语文本,把它放在西班牙语中分析是完美的,但结果总是否定的 我一直在寻找如何配置西班牙语解析器,令牌化和我发现的一切对于情感分析都是无用的。 有人可以告诉我,如果唯一有效的东西是标记化,而情感不是西班牙语? 这是我的属性文件,所以我设法找到

  • 我在Java执行HTTP GET调用以获取可能包含西班牙语字符的内容,例如:@añez 但我从MySQL-:'a:±ez得到的回应是,到目前为止,我在网上搜索并做了以下操作: > 在连接字符串中追加了utf-8作为编码(使用Java)jdbc:mysql:/localhost:3306/dbname?useUnicode=true&characterencoding=utf-8 更新了表的编码AL

  • 问题内容: 我在页面上添加了一个简单的排序。这个想法是搜索产品。这些产品是用西班牙语编写的,带有口音。例如:“Jamón”。 这是我的代码: 我唯一的问题是您必须输入“Jamón”才能找到产品“Jamón”。我想要的是更加灵活,如果用户键入“ Jamon”,则结果必须包含“Jamón”。 如何使用角度过滤器进行搜索而忘记重音符号?任何想法? 提前致谢。 问题答案: 您需要创建一个过滤器功能(或完整