每个句子的单词数

时间:2013-03-03 06:54:11

标签: python numpy

我正在阅读Python 2.7中的文本文件,我想要做的是将文本文件的每个句子中的单词计数填入1D数组。这就是我所拥有的:

f = open(file_txt, 'r')

sen_prog = []

for line in f:
    sents = line.split('.')
    sen_prog.append(sents)

sen_p = []

for a in sen_prog:
    for b in a:
        sen_p.append(b)

sen_p = numpy.array(sen_p)
sen_p = sen_p[sen_p!='-']

sen_d = []


for c in sen_p:
    sen_d.append([len(x.split()) for x in sen_p])

sen_d = numpy.array(sen_d)
sen_d = numpy.ravel(sen_d)

print sen_prog, sen_d

问题是它是创建了数组,但是它给出了错误的句子数。我的文本文件有55个句子(每个句子用句号分隔'。'),但是它给出了错误的数字......需要帮助!

3 个答案:

答案 0 :(得分:1)

您正逐行阅读文件。假设文件是​​这样的,并且句子跨越多行,则可能得到错误的计数。

This is line 1. This 
is line 2. This is 
line 3.

sen_prog将具有值:

[ "This is line 1", "This", "is line 2", "This is", "line 3", ""]

这可能不是你想要的。

您可能想要这样做:

sen_prog = " ".join(f.readlines()).split(".")

所以sen_prog是

[ "This is line 1", "This is line 2", "This is line 3", ""]

用于上述输入。

答案 1 :(得分:1)

这会产生一个句子长度的列表。

with open('path/to/file', 'r') as f:
    l = [len(x.split()) for x in f.read().split('.')]

答案 2 :(得分:0)

这应该这样做,并且还会在一行中考虑多个句子:

sen_prog = []
sentence = ''

for line in f:
    parts = line.split('.')
    if len(parts) > 1:
        sentence += parts[0]
        sen_prog.append(sentence)
        if len(parts) > 2:
            sen_prog.append(parts[1:-1])
        sentence = parts[-1]