gpt4 book ai didi

python - 使用 Python 在一个 .txt 文件中搜索单词或短语列表(并显示上下文)

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:09 25 4
gpt4 key购买 nike

基本上如问题所述。我是 Python 的新手,喜欢通过观察和实践来学习。

我想创建一个脚本,用于在文本文档(例如从新闻文章中复制和粘贴的文本)中搜索某些单词或短语。理想情况下,单词和短语列表将存储在单独的文件中。

在得到结果的时候,如果能得到结果的上下文就好了。所以也许它可以打印出文本文件中找到的每个搜索词前后的 50 个字符。如果它还显示在哪一行找到搜索词,那就太好了。

任何有关如何对此进行编码甚至代码示例的指示都将不胜感激。

最佳答案

尽管 Python 社区中的许多人经常表达对正则表达式的反感,但它们确实是适用于适当用例的宝贵工具——其中肯定包括识别单词和短语(感谢 \b 正则表达式模式中的“单词边界”元素——基于字符串处理的替代方案更成问题,例如,.split() 使用空格作为分隔符,因此令人讨厌地离开标点附在与其相邻的单词上,等等)。

如果 RE 没问题,我会推荐如下内容:

import re
import sys

def main():
if len(sys.argv) != 3:
print("Usage: %s fileofstufftofind filetofinditin" % sys.argv[0])
sys.exit(1)

with open(sys.argv[1]) as f:
patterns = [r'\b%s\b' % re.escape(s.strip()) for s in f]
there = re.compile('|'.join(patterns))

with open(sys.argv[2]) as f:
for i, s in enumerate(f):
if there.search(s):
print("Line %s: %r" % (i, s))

main()

第一个参数是包含要查找的单词或短语的文本文件(路径),每行一个,第二个参数(路径)是要在其中查找它们的文本文件。如果需要,可以很容易地使大小写搜索不敏感(可能只是基于命令行选项开关可选),等等。

对不熟悉 REs 的读者的一些解释...:

patterns 项中的 \b 项确保不会出现意外匹配(如果您正在搜索“cat”或“dog”,则您赢了不会看到“目录”或“失败者”的意外命中;你不会错过“猫,微笑,逃跑”中的一些 split ,认为那里有“猫”这个词,包括逗号; -).

| 项表示,例如来自包含内容的文本文件(两行)

cat
dog

这将形成 '\bcat\b|\bdog\b' 模式,它将定位“cat”或“dog”(作为独立词,忽略标点符号,但拒绝命中在更长的词中)。

re.escape 转义标点符号,因此它按字面匹配,而不是像通常在 RE 模式中那样具有特殊含义。

关于python - 使用 Python 在一个 .txt 文件中搜索单词或短语列表(并显示上下文),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007889/

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