从结果集中划分python函数生成“零”值

时间:2017-07-23 22:25:28

标签: python nltk

目标:我试图创建每个句子的平均单词数。

步骤:使用以下两个功能。

结果:如果我从函数中打印出任何一个结果就好了。但是当我在for循环中使用除法('/')时(在代码的底部,我得到一个零列表。

预期:感谢任何建议。

import nltk.data
from nltk.tokenize import RegexpTokenizer

        def wordsInSentences():
            tokenizer = RegexpTokenizer(r'\w+')
            data=[]
            with open ('~/20110622.html', 'r') as f:
                for i in [len(tokenizer.tokenize(i)) for i in f]:
                    data.append(i)
            return data

        def totalSentenceCounter():
            sentence_detector = nltk.data.load('/~/punkt/english.pickle')
            with open ('/~/20110622.html', 'r') as f:
                y= len (['\n'.join(sentence_detector.tokenize (i.strip())) for i in f])
            return y

for i in wordsInSenteces():
print i/int(totalSentenceCounter())

3 个答案:

答案 0 :(得分:0)

将其替换为print float(i)/totalSentenceCounter()。您正在执行整数除法,因为分子和分母都是int,您至少需要其中一个为float

>>> print 1/2
0
>>> print float(1)/2
0.5

答案 1 :(得分:0)

在Python 2中,您正在使用的是替换

print i/int(totalSentenceCounter())

print i/float(totalSentenceCounter())

在Python 3中,您现有的代码将按预期工作,无需任何修改。

答案 2 :(得分:0)

在Python 2.x中,整数除法默认返回一个整数。

 $ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 / 5
0
>>> 1 / 2
0
>>> 2 / 3
0
>>> int(0.2)
0
>>> int(0.5)
0
>>> int(0.666)
0

在Python 3.x中,除法更“自然”(即返回实数)并且默认情况下返回浮点数,即使输出可以是整数:

$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 / 5
0.2
>>> 10 / 5
2.0

要在Python 2.x中模拟Python 3除法行为,请在脚本顶部添加__future__导入,例如

$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import division
>>> 1 / 5
0.2

或者如同其他答案所示,您可以在分割操作之前将分母或分子投射到浮点数中,例如

$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 / 5
0
>>> 1.0 / 5
0.2
>>> 1 / 5.0
0.2
>>> float(1) / 5
0.2
>>> 1 / float(5)
0.2