我有这段代码只打印错误单词的行号。 我希望它打印txt文件中不正确的单词的亚麻布。 我可以修改此代码吗?
# text1 is my incorrect words
# words is my text file where my incorrect word are in
from collections import defaultdict
d = defaultdict(list)
for lineno, word in enumerate(text1):
d[word].append(lineno)
print(d)
我现在已经完成了这个但是这会打印出它所在位置的字符,而不是字符的位置。 这是代码
import sys
import string
text = []
infile = open(sys.argv[1], 'r').read()
for punct in string.punctuation:
infile = infile.replace(punct, "")
text = infile.split()
dict = open(sys.argv[2], 'r').read()
dictset = []
dictset = dict.split()
words = []
words = list(set(text) - set(dictset))
words = [text.lower() for text in words]
words.sort()
def allwords(line):
return line.split()
def iswrong(word):
return word in words
for i, line in enumerate(text):
for word in allwords(line):
if iswrong(word):
print(word, i))
millwal 342
答案 0 :(得分:5)
你可以完全重写这段代码来做你提到的 - 这段代码的结构与你需要的东西没有任何关系。
由于您需要“来自文本文件的行号”,因此您需要一个表示文本文件的对象(作为内存中的行列表或作为打开的文件对象)。你说你有一个叫words
(不清楚这是文件名还是Python变量标识符):将文本放在一个文件中(例如,作为变量)words
和(不正确)名为text1
的(某种类型的集合)中的单词是一个真正可怕的名称选择,可能是我在几十年中看到的最糟糕的 - 具有误导性。使用与变量含义更匹配的变量名称,除非您尝试让自己和其他人混淆。
给出输入文本的明确命名变量,例如text = open('thefile.txt')
,以及确定单词是否不正确的一种不错的方法,比如函数def iswrong(word):...
,编码所需内容的方式变得清晰:
for i, line in enumerate(text):
for word in allwords(line):
if iswrong(word):
print word, i
allwords
功能可能只是:
def allwords(line):
return line.split()
如果你没有标点符号(用空格分隔的单词)或
import re
def allwords(line):
return re.findall(r'\w+', line)
使用正则表达式。
如果是badwords
是一组错误的字词,
def iswrong(word):
return word in badwords
或反之,如果goodwords
是所有正确单词的集合,
def iswrong(word):
return word not in goodwords
iswrong
和allwords
的详细信息是次要的 - 选择是将它们保留为函数还是仅将其代码嵌入到主要控制流中。