gpt4 book ai didi

python - 如何在Python中通过删除换行符来搜索字符串,但返回找到字符串的确切行?

转载 作者:行者123 更新时间:2023-12-01 06:08:47 27 4
gpt4 key购买 nike

我有一堆 PDF 文件,我必须根据它们搜索一组关键字。我必须提取找到关键字的确切行。我首先使用xpdf的pdf2text将文件转换为PDF。 (尝试过 solr,但很难根据我的要求定制输出/模式)。

import sys

file_name = sys.argv[1]
searched_string = sys.argv[2]
result = [(line_number+1, line) for line_number, line in enumerate(open(file_name)) if searched_string.lower() in line.lower()]

#print result

for each in result:
print each[0], each[1]

ThinkCode:~$ python find_string.py sample.txt "String Extraction"

我遇到的问题是,对于搜索字符串在行尾被破坏的情况:

If you are going to index large binary files, remember to change the size limits. String

Extraction is a common problem

如果我正在搜索“字符串提取”,如果我使用上面提供的代码,我将错过这个关键字。在不制作 2 个文本文件副本的情况下实现此目标的最有效方法是什么(一个用于搜索关键字以提取行(数字),另一个用于删除换行符并查找关键字以消除关键字跨越 2 个副本的情况)行)。

非常感谢大家!

最佳答案

注意:一些没有任何代码的考虑,但我认为它们属于答案而不是评论。

我的想法是只搜索第一个关键字;如果找到匹配项,则搜索第二个。这允许您,如果在行尾找到匹配项,则考虑下一行,并且仅当在第一个位置找到匹配项时才进行行串联*。

编辑:

编写了一个简单的示例,但最终使用了不同的算法;其背后的基本思想是以下代码片段:

def iterwords(fh):
for number, line in enumerate(fh):
for word in re.split(r'\s+', line.strip()):
yield number, word

它迭代文件处理程序并为文件中的每个单词生成一个 (line_number, word) 元组。

之后的匹配就变得非常简单;你可以找到我的实现 as a gist on github 。可以按如下方式运行:

python search.py 'multi word search string' file.txt

链接代码有一个主要问题,出于性能和复杂性原因,我没有编写解决方法。你能弄清楚吗? (剧透:尝试搜索第一个单词在文件中连续出现两次的句子)

* 我自己没有进行任何测试,但是this articlepython wiki表明字符串连接在 python 中效率不高(不知道信息的实际情况)。

关于python - 如何在Python中通过删除换行符来搜索字符串,但返回找到字符串的确切行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6874609/

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