将句子放入列表 - python

0 投票
2 回答
5785 浏览
提问于 2025-04-16 12:28

我明白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())

撰写回答