如何在python中将文本文件拆分为单词?

时间:2013-11-01 03:28:03

标签: python

我是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)

简单地逐行分割(一行中的一个单词)。

5 个答案:

答案 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或其他任何您喜欢的内容。