目标:我试图创建每个句子的平均单词数。
步骤:使用以下两个功能。
结果:如果我从函数中打印出任何一个结果就好了。但是当我在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())
答案 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