我正在使用 Python 2.7.4
我拼凑了一个程序,它将读取一个 .txt 文件,分隔单词,删除空格和标点符号,将大写字母转换为小写字母,并返回 x 个最常见的单词,以及这些单词出现的次数单词出现在文档中。我正在尝试但未能做到的是从输出中排除某些最常见的词(即“a”、“i”、“to”、“for”等)。
我是初学者,所以我可能只是误解了对某些已经回答(但我无法利用)的问题的回答,例如:
How to remove list of words from a list of strings
和
Remove all occurrences of words in a string from a python list
我试图将不同的方面分成不同的功能以希望简化事情,尽管我怀疑我实际上可能使事情过于复杂。我的程序如下:
import string
from collections import Counter
def wordlist(line):
wordlist2 = []
wordlist1 = line.split()
for word in wordlist1:
cleanword = ""
for char in word:
if char in string.punctuation:
char = ""
if char in string.whitespace:
char = ""
cleanword += char
wordlist2.append(cleanword)
return wordlist2
def wordcaps(line):
line = [char.lower() for char in line]
return line
def countwords(document):
words = Counter()
words.update(document)
x = words.most_common()
print x
def readfile(filename):
fin = open(filename).read()
print countwords(wordcaps(wordlist(fin)))
以下是我尝试过的一些事情。我试图创建一个列表 - 例如,filterlist = ['i', 'to', 'and'] - 并将其用作 wordlist 函数中的条件:
for word in wordlist1:
if word in filterlist:
word = ""
这似乎没有任何效果。我也试过了,没用:
for word in wordlist1:
if word in filterlist:
wordlist1.append("")
我已经尝试了很多其他的东西,但是无论如何这个问题似乎都太长了。我看到了对“正则表达式”的引用,但我不确定它是什么或它如何适合。
请您参考如下方法:
通常做就够了:
for word in wordlist1:
if word.lower() not in filterlist:
words.append(word)
words 是包含有效单词的输出列表。
您的方法不起作用,因为您使用相同的列表来存储输入和输出列表 wordlist1:
for word in wordlist1:
if word in filterlist:
wordlist1.append("")
你也可以这样做:
wordlist1 = [word for word in wordslist1 if word not in filterlist]
它使用临时列表来存储有效单词,然后将它们分配回您的原始输入列表。
