将句子放入列表 - python

时间:2011-02-24 18:09:20

标签: python nlp nltk tokenize

我知道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(行)将其打印出来。我该如何将其列入清单?

2 个答案:

答案 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())