这就是我所做的。问题将在最后。
1)我首先使用open().read()
打开一个.txt文档来运行如下函数:
def clean_text_passage(a_text_string):
new_passage=[]
p=[line+'\n' for line in a_text_string.split('\n')]
passage = [w.lower().replace('</b>\n', '\n') for w in p]
if len(passage[0].strip())>0:
if len(passage[1].strip())>0:
new_passage.append(passage[0])
return new_passage
2)使用返回的new_passage
,我使用以下命令将单词转换为单词行:
newone = "".join(new_passage)
3)然后,按如下方式运行另一个函数:
def replace(filename):
match = re.sub(r'[^\s^\w+]risk', 'risk', filename)
match2 = re.sub(r'risk[^\s^\-]+', 'risk', match)
match3 = re.sub(r'risk\w+', 'risk', match2)
return match3
到目前为止,一切都很好。现在这是问题所在。当我打印match3
时:
i agree to the following terms regarding my employment or continued employment
with dell computer corporation or a subsidiary or affiliate of dell computer
corporation (collectively, "dell").
看起来是单词。但是,
4)我按convert = count_words(match3)
运行了最后一个函数,如下所示:
def count_words(newstring):
from collections import defaultdict
word_dict=defaultdict(int)
for line in newstring:
words=line.lower().split()
for word in words:
word_dict[word]+=1
当我打印word_dict
时,它显示如下:
defaultdict(<type 'int'>, {'"': 2, "'": 1, '&': 4, ')': 3, '(': 3, '-': 4, ',': 4, '.': 9, '1': 7, '0': 8, '3': 2, '2': 3, '5': 2, '4': 2, '7': 2, '9': 2, '8': 1, ';': 4, ':': 2, 'a': 67, 'c': 34, 'b': 18, 'e': 114, 'd': 44, 'g': 15, 'f': 23, 'i': 71, 'h': 22, 'k': 10, 'j': 2, 'm': 31, 'l': 43, 'o': 79, 'n': 69, 'p': 27, 's': 56, 'r': 72, 'u': 19, 't': 81, 'w': 4, 'v': 3, 'y': 16, 'x': 3})
因为我的代码的目标是计算一个特定的单词,我需要像行中的'风险'这样的词(即,我喜欢冒险),而不是'我','我','我'
问题:如何使match3
包含与使用readlines()
相同的方式包含单词,以便我可以计算一行中的单词?
当我将match3
保存为.txt文件时,使用readlines()
重新打开它,然后运行计数功能,它可以正常工作。我确实想知道如何在不保存并使用readlines()
重新打开它的情况下使其工作?
感谢。我希望我能弄清楚这一点,以便我能睡觉。
答案 0 :(得分:0)
试试这个
for line in newstring
意味着一个接一个地
def count_words(newstring):
from collections import defaultdict
word_dict=defaultdict(int)
for line in newstring.split('\n'):
words=line.lower().split()
for word in words:
word_dict[word]+=1
答案 1 :(得分:0)
tl; dr,问题是如何按行分割文本?
然后它很简单:
>>> text = '''This is a
longer text going
over multiple lines
until the string
ends.'''
>>> text.split('\n')
['This is a', 'longer text going', 'over multiple lines', 'until the string', 'ends.']
答案 2 :(得分:0)
您的match3
是一个字符串,所以
for line in newstring:
遍历newstring中的字符,而不是行。你可以简单地写一下
words = newstring.lower().split()
for word in words:
word_dict[word]+=1
或者如果您愿意
for line in newstring.splitlines():
words=line.lower().split()
for word in words:
word_dict[word]+=1
或其他什么。 [我自己使用Counter
,但defaultdict(int)
几乎一样好。]
注:
def replace(filename):
filename
不是文件名!