将句子放入列表 - python
我明白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(line)是用来打印句子的。那么我该怎么把它放进一个列表里呢?
2 个回答
1
你不能用关键字名称(比如“read”)来给你的程序对象命名。
.
如果你想在一个列表中添加内容,你必须先有一个列表:
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())
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']]
做这样的事情时,使用列表推导式会更简洁,而且我觉得更容易阅读:
slist = [sent_tokenize(line) for line in infile]
为了更清楚,以上代码返回的是一个包含句子的列表,每一行对应一个句子的列表。如果你想要一个扁平化的句子列表,可以按照eyquem的建议这样做:
slist = sent_tokenize(infile.read())