我知道nltk可以使用以下代码拆分句子并将其打印出来。 但是如何将句子放入列表而不是输出到屏幕上?
import nltk.data
from nltk.tokenize import sent_tokenize
import os, sys, re, glob
cwd = './extract_en' #os.getcwd()
for infile in glob.glob(os.path.join(cwd, 'fileX.txt')):
(PATH, FILENAME) = os.path.split(infile)
read = open(infile)
for line in read:
sent_tokenize(line)
sent_tokenize(行)将其打印出来。我该如何将其列入清单?
答案 0 :(得分:2)
这是我用来测试代码的简化版本:
import nltk.data
from nltk.tokenize import sent_tokenize
import sys
infile = open(sys.argv[1])
slist = []
for line in infile:
slist.append(sent_tokenize(line))
print slist
infile.close()
当这样调用时,会打印以下内容:
me@mine:~/src/ $ python nltkplay.py nltkplay.py
[['import nltk.data\n'], ['from nltk.tokenize import sent_tokenize\n'], ['import sys\n'], ['infile = open(sys.argv[1])\n'], ['slist = []\n'], ['for line in infile:\n'], [' slist.append(sent_tokenize(line))\n'], ['print slist\n'], ['\n']]
当做这样的事情时,列表理解更简洁,IMO更令人愉快阅读:
slist = [sent_tokenize(line) for line in infile]
为了澄清,上面返回了一系列句子列表,每行一个句子列表。如果你想要一个平坦的句子列表,那就改为做,就像eyquem建议的那样:
slist = sent_tokenize(infile.read())
答案 1 :(得分:1)
您不得使用关键字名称(读取)来命名您的程序对象。
如果要附加到列表中,则必须有一个列表:
reclist = []
for line in f:
reclist.append(line)
或列表理解
reclist = [ line for line in f ]
或使用Python的工具
reclist = f.readlines()
或者我不明白你想要什么
编辑:
好吧,考虑到Jochen Ritzel的评论,你想要
f = open(infile)
reclist = sent_tokenise(f.read())