0

我有一个包含此类数据的文件:

Sentence[0].Sentence[1].Sentence[2].'/n'
Sentence[0].Sentence[1].Sentence[2].'/n'
Sentence[0].Sentence[1].Sentence[2].'/n'

我要打印的都是Sentences0。这就是我所做的,但它会打印出一个空白列表。

from nltk import *
import codecs
f=codecs.open('topon.txt','r+','cp1251')
text = f.readlines()
first=[sentence for sentence in text if re.findall('\.\n^Abc',sentence)]
print first
4

3 回答 3

3

为此,您不需要 NLTK(也没有使用它)。除非我误解了这个问题,否则这应该可以解决问题:

with open('topon.txt') as infile:
  for line in infile:
    print line.split('.', 1)[0]
于 2013-10-30T20:33:29.030 回答
1

仅当每个句子都以句点结尾并且句点不用于其他目的时,才可以在句点处拆分段落。如果你有很多真实的文本,那么这些都不是真实的。缩写,问题?感叹!等会绊倒你很多。因此,请使用 nltk 为此目的提供的工具:函数sent_tokenize()。这并不完美,但比寻找月经要好得多。如果text是您的段落列表,您可以像这样使用它:

first = [ ]
for par in text:
    sentences = nltk.sent_tokenize(par)
    first.append(sentences[0])

您可以将以上内容折叠成列表理解,但它的可读性不会很高......

于 2013-10-31T00:44:25.660 回答
1

除了@inspectorG4dget 的答案,你可以通过正则表达式来做到这一点:

from nltk import *
import codecs

f = codecs.open('a.txt', 'r+', 'cp1251')
text = f.readlines()
print [re.findall('^[^.]+', sentence) for sentence in text]
于 2013-10-30T20:39:12.593 回答