gpt4 book ai didi

python - 如何在使用python的 Elasticsearch 中检索术语的频率?

转载 作者:行者123 更新时间:2023-12-03 00:39:42 25 4
gpt4 key购买 nike

我必须在所有具有该术语的匹配文档中找到一个术语的出现频率,例如:“sky”。例如:如果doc1有一个句子,

"sky is blue. sky is blue."



doc2有一个句子,

"the plane is flying in the sky".



那么,术语“天空”的总频率应为3。我发现这里提到的术语 vector : https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html
这是Python API http://elasticsearch-py.readthedocs.io/en/master/api.html?highlight=term%20vector#elasticsearch.Elasticsearch.termvectors

但是当我尝试实现它时:
es.search(index="abc", body={"from":0, "size":0,"term vectors":{"fields":["sky"],"field_statistics":"true"}})
我收到一个错误:

raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info) elasticsearch.exceptions.RequestError: TransportError(400, u'parsing_exception', u'Unknown key for a START_OBJECT in [term vectors].')

最佳答案

出于我的目的,我从不使用termvector,因为我在进行其他处理后会检索统计信息,因此我使用mtermvector。它与termvector相同,但可用于ID列表。如果您具有与“sky”匹配的所有文档ID的列表,则可以按照以下方式进行:

from elasticsearch import Elasticsearch

es = Elasticsearch()

index = "abc"
my_doc_type ="your_doc_type"
ids = []

result = es.search(index="abc", doc_type=my_doc_type, body={"query": {"term": {"field": "sky"}}})

for res in result['hits']['hits']:
ids.append(res['_id'])




for doc in es.mtermvectors(index=index,doc_type=doc_type,body=dict(ids=ids,parameters=dict(term_statistics=True,field_statistics=True,fields=fields)))['docs']:
fields = doc['term_vectors']
terms = field['terms']
tf = vec["term_freq"]
df = vec["doc_freq"]

关于python - 如何在使用python的 Elasticsearch 中检索术语的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50085839/

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