gpt4 book ai didi

Python - 查询倒排索引

转载 作者:行者123 更新时间:2023-11-28 18:50:49 26 4
gpt4 key购买 nike

这是我关于 SO 的第一篇文章,如果我的问题有点微不足道,我提前道歉,我是编程世界的新手,我选择 python 作为我的第一个“严肃的”OOP 语言。我通过 SO 存档进行了搜索,但找不到与我完全相关的任何问题。好的,长话短说,这是问题所在:

我正在研究倒排索引。我在网上找到了几个教程和提示可以遵循,我做了以下事情:

  • class Document 用于提取词干并通过 finditer 函数返回它们的开始和结束位置。

  • Inverted_Index 类获取文档集合(列表中的列表),将它们标记化并以

    的形式将它们放入倒排索引中


{'word':{document_id:(start_pos, end_pos)}}

喜欢{'cloud': {0: [(5, 10)]}, 'document': {1: [(11, 19)], 2: [(22, 30)]} ...}/。(我在 SO 主题的帮助下完成了 document_id,遍历了文档的枚举集合。关于嵌套字典,我很业余地制作了它们,例如:

if nested_dict not in existing_dict:
existing_dict[nested_dict] = {}

当我阅读 stack owerflow 时,我注意到“defaultdict”数据类型是执行此操作的非常优越的方法,但我还没有找到“collections”模块。)

回到正轨:在 Inverted_Index 内部,我做了一个查询方法(只是 OR 运算符的一个版本),它将字符串作为查询,如果该字符串与我的倒排索引中的键/术语匹配,则返回 document_id 和 start术语的结束点,例如:

[(1, [(0, 4), (11, 19)]), ...]

然后我就……卡住了。我想制作一个查询输出,打印出文档中找到的单词及其环境,但我不知道如何连接查询方法(带有开始和结束位置的 document_id)和倒排索引的结果,我不知道不知道如何在她的环境中突出显示匹配的查询。因此我做了起点和终点,但我不知道如何在 python 中强调它?大胆吗?

我想到的结果是这样的:

###################
Your query:'chocolate pudding'
Results:
########
In a document with id: 1
yaddi yaddi yadda chocolate bla bla bla pudding
hocolate bla bla bla pudding yaddi yaddi yadda bla

我的意思是,我正在阅读 http://docs.python.org/2/library/string.html#string.center并认为在同一列中对齐找到的单词/查询会起到欺骗作用。但我不知道如何到达那里,所以任何类型的提示都会很棒,因为我没有陷入我的程序,因为我一直在理解 python 背后的逻辑,在这种情况下,教程不会做正义。 (是的,我有一些 python 书籍,但他们对这类问题有扩展的方法,可能考虑到它不适合初学者,但我不知道从哪里开始,我可以使用哪些程序。问题是,我们在大学里学习语言理论和 IR 理论,但我们在实践中做了一些事情。)。

谢谢!

很抱歉我生命中的这个故事结束了:D


我忘记了,一个不让这个话题变得模糊的代码:

class inverted_index(dict):

def __init__(self,collection_of_docs):
for doc_id,document in enumerate(collection_of_docs):
for word,start,end in document.tokenize(): #form: [('sky', 0, 4)]
if word not in self:
self[word]={}
if doc_id not in self[word]:
self[word][doc_id]=[]
self[word][doc_id].append((start,end))


def query(self,query_string):
result={}
for query_term in re.findall(r'\w+',query_string.lower(),re.UNICODE):
for doc_id in self.get(query_term,{}):
if doc_id not in result:
result[doc_id]=self[query_term][doc_id]
else:
result[doc_id]=result[doc_id]+self[query_term][doc_id]
return sorted(result.items(),key=lambda e:-len(e[1]))

最佳答案

您的文本需要一个“get_with_surroundings”方法。

它看起来像

class inverted_index(dict):
def __init__(self,collection_of_docs):
self.collection_of_docs = collection_of_docs #to store those
# ... rest of your code

def get_with_surroundings(document_id, position_tuple):
start, end = position_tuple
return self.collection_of_docs[document_id].text[start-10:end+10]

+10 和 -10 的变化取决于您需要显示多少环境。我假设您的文档类有一些“文本”属性,它是该文档的纯 python 字符串。

使用您的查询结果之一调用此方法将或多或少地实现您需要的结果。

How do I print bold text in Python?可能对 python 中的粗体文本有帮助。

关于Python - 查询倒排索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259903/

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