gpt4 book ai didi

python - 从 txt 文件中读取单词 - Python

转载 作者:太空狗 更新时间:2023-10-30 01:11:51 25 4
gpt4 key购买 nike

我开发了一个代码,负责读取 txt 文件中的单词,在我的例子中是“elquijote.txt”,然后使用字典 {key: value} 来显示出现的单词及其出现。

例如,文件“test1.txt”包含以下文字:

hello hello hello good bye bye 

我的程序的输出是:

 hello 3
good 1
bye 2

该程序的另一个选项是,它显示那些出现次数多于我们通过参数引入的数字的单词。

如果在 shell 中,我们输入以下命令 "python readingwords.py text.txt 2",将显示文件“test1.txt”中出现次数超过我们输入的次数的单词,在本例中为 2

输出:

hello 3

现在我们可以介绍常用词的第三个论点,例如限定连词,它是如此通用,我们不希望在我们的词典中显示或介绍。

我的代码工作正常,问题是使用“elquijote.txt”等大文件需要很长时间才能完成该过程。

我一直在想,这是因为我使用了我的辅助列表来消除单词。

作为一种解决方案,我认为不在我的列表中引入那些出现在 txt 文件中的单词,这些单词是通过参数输入的,其中包含要丢弃的单词。

这是我的代码:

def contar(aux):
counts = {}
for palabra in aux:
palabra = palabra.lower()
if palabra not in counts:
counts[palabra] = 0
counts[palabra] += 1
return counts

def main():

characters = '!?¿-.:;-,><=*»¡'
aux = []
counts = {}

with open(sys.argv[1],'r') as f:
aux = ''.join(c for c in f.read() if c not in characters)
aux = aux.split()

if (len(sys.argv)>3):
with open(sys.argv[3], 'r') as f:
remove = "".join(c for c in f.read())
remove = remove.split()

#Borrar del archivo
for word in aux:
if word in remove:
aux.remove(word)

counts = contar(aux)

for word, count in counts.items():
if count > int(sys.argv[2]):
print word, count

if __name__ == '__main__':
main()

Contar函数介绍词典中的单词。

main 函数在“aux”列表中引入那些不包含符号字符的单词,然后从同一个列表中删除那些从另一个 .txt 文件加载的“禁止”单词。

我认为正确的解决方案是在我丢弃不被接受的符号的地方丢弃禁用词,但在尝试了几种方法后我没有设法正确地做到这一点。

在这里你可以在线测试我的代码: https://repl.it/Nf3S/54谢谢。

最佳答案

这里有一些优化:

  • 使用 collections.Counter() 对 contar() 中的项目进行计数
  • 使用 string.translate() 删除不需要的字符
  • 在计数后从忽略词​​列表中弹出项目,而不是从原始文本中删除它们。

稍微加快速度,但不是一个数量级。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import collections

def contar(aux):
return collections.Counter(aux)

def main():

characters = '!?¿-.:;-,><=*»¡'
aux = []
counts = {}

with open(sys.argv[1],'r') as f:
text = f.read().lower().translate(None, characters)
aux = text.split()

if (len(sys.argv)>3):
with open(sys.argv[3], 'r') as f:
remove = set(f.read().strip().split())
else:
remove = []

counts = contar(aux)
for r in remove:
counts.pop(r, None)

for word, count in counts.items():
if count > int(sys.argv[2]):
print word, count

if __name__ == '__main__':
main()

关于python - 从 txt 文件中读取单词 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47097492/

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