我是python的新手,之前也没有使用过文本...我有100个文本文件,每个文件有大约100到150行非结构化文本描述病人的状况。我使用以下方法在python中读取了一个文件:
with open("C:\\...\\...\\...\\record-13.txt") as f:
content = f.readlines()
print (content)
现在我可以使用例如:
将此文件的每一行拆分为单词a = content[0].split()
print (a)
但我不知道如何将整个文件拆分为单词? 做循环(同时或为)帮助吗?
谢谢你的帮助。你的回答帮助我写这个(在我的文件中,单词按空格分割,以便我认为是分隔符!):
with open ("C:\\...\\...\\...\\record-13.txt") as f:
lines = f.readlines()
for line in lines:
words = line.split()
for word in words:
print (word)
简单地逐行分割(一行中的一个单词)。
答案 0 :(得分:8)
这取决于您定义words
的方式,或者您认为delimiters
的内容
请注意,Python中的string.split
会收到一个可选参数delimiter
,因此您可以将其传递为:
for lines in content[0].split():
for word in lines.split(','):
print(word)
不幸的是,string.split
仅收到一个分隔符,因此您可能需要进行多级分割:
for lines in content[0].split():
for split0 in lines.split(' '):
for split1 in split0.split(','):
for split2 in split1.split('.'):
for split3 in split2.split('?'):
for split4 in split3.split('!'):
for word in split4.split(':'):
if word != "":
print(word)
看起来很难看,对吗?幸运的是,我们可以使用迭代:
delimiters = ['\n', ' ', ',', '.', '?', '!', ':', 'and_what_else_you_need']
words = content
for delimiter in delimiters:
new_words = []
for word in words:
new_words += word.split(delimiter)
words = new_words
<强>编辑:强> 或者我们只需使用正则表达式包:
import re
delimiters = ['\n', ' ', ',', '.', '?', '!', ':', 'and_what_else_you_need']
words = re.split('|'.join(delimiters), content)
答案 1 :(得分:7)
with open("C:\...\...\...\record-13.txt") as f:
for line in f:
for word in line.split():
print word
或者,这会为您提供单词列表
with open("C:\...\...\...\record-13.txt") as f:
words = [word for line in f for word in line.split()]
或者,这会给你一个行列表,但每行都是一个单词列表。
with open("C:\...\...\...\record-13.txt") as f:
words = [line.split() for line in f]
答案 2 :(得分:4)
没有人建议发电机,我很惊讶。我就是这样做的:
def words(stringIterable):
#upcast the argument to an iterator, if it's an iterator already, it stays the same
lineStream = iter(stringIterable)
for line in lineStream: #enumerate the lines
for word in line.split(): #further break them down
yield word
现在,这可以用在你可能已经在记忆中的简单句子列表中:
listOfLines = ['hi there', 'how are you']
for word in words(listOfLines):
print(word)
但它在文件上也能正常工作,而无需在内存中读取整个文件:
with open('words.py', 'r') as myself:
for word in words(myself):
print(word)
答案 3 :(得分:3)
我会使用Natural Language Tool Kit,因为split()
方式不符合标点符号。
import nltk
for line in file:
words = nltk.word_tokenize(line)
答案 4 :(得分:2)
最灵活的方法是使用列表推导来生成单词列表:
with open("C:\...\...\...\record-13.txt") as f:
words = [word
for line in f
for word in line.split()]
# Do what you want with the words list
然后您可以迭代,添加到collections.Counter
或其他任何您喜欢的内容。