gpt4 book ai didi

elasticsearch - 文字中的短语之间有多少个单词?

转载 作者:行者123 更新时间:2023-12-02 23:55:53 25 4
gpt4 key购买 nike

我有一个问题,如何在文字短语之间计算单词?例如,我有下一段文字:

Elon Musk is a technology entrepreneur and investor. He is the founder, CEO, and lead designer of SpaceX. Elon Musk has stated that the goals of SpaceX, Tesla, and SolarCity revolve around his vision to change the world and humanity.



我想计算“Elon Mask”和“SpaceX”之间或“SolarCity”和“Tesla”之间有多少个单词。如何在一个文档的框架中进行 flex 搜索?

最佳答案

以下是我想出的。

映射

您将需要确保该字段的类型为keyword,并使用通过该文档的id字段进行的词条查询,以便将以下逻辑仅应用于该文档。

我创建了一个包含单个多字段myfield的示例映射,如下所示:

{  
"myfield":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}

查询

我已经使用 Script QuerySum Aggregation对两个短语之间的单词进行计数。
POST <your_index_name>/_search
{
"query": {
"term": {
"_id": "1"
}
},
"aggs": {
"wordCount": {
"sum": {
"script": {
"source": """
String st = doc['myfield.keyword'].value.toString();
if(st.contains(params.phrase_1) && st.contains(params.phrase_2)){
int start = st.indexOf(params.phrase_1);
int end = st.indexOf(params.phrase_2);

//Substring would have list of words that includes phrase_1 till index of phrase_2
String subString = st.substring(start,end);

//Count tokens available in params.phrase_1
StringTokenizer tokens_phrase_1 = new StringTokenizer(params.phrase_1);

//Count total tokens available in substring
StringTokenizer tokens = new StringTokenizer(subString);

//Count = Count of Words - Count of words in phrase_1
return tokens.countTokens()-tokens_phrase_1.countTokens();
}else{
//defensive logic
return 0;
}
""",
"params":{
"phrase_1": "Elon Musk",
"phrase_2": "SpaceX"

}
}
}
}
}
}

请注意,输入在 params部分中。我在上面的代码中添加了一些注释,这些注释有助于理解如何添加计算字词的逻辑。

请测试一下,让我知道是否有帮助!

关于elasticsearch - 文字中的短语之间有多少个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53632934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com