python - 从文本文件中选择少于 280 个字符的随机句子
问题描述
我正在做一个项目,我想读取一个大文本文件,从该文件中随机选择一个完整的句子。如果该文件语句少于 280 个字符或更少,则打印该文件。如果不选择另一个句子,直到找到少于 280 个字符的句子。使用 nltk 我可以将文本分解成单独的句子,随机选择一个并计算字符数。
import nltk.data
import random
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
fp = open("test.txt")
data = fp.read()
tok = tokenizer.tokenize(data); #breaks into sentences
newTok = random.choice(tok) #selects random sentence
length = len(newTok) #gives amount of characters in random sentence
我现在正在尝试创建一个while
循环,该循环将测试一个句子是否少于 280 个字符来打印它,如果不是,将随机选择另一个句子进行测试
while length < 280: # while length of sentence is less than 280
print "length of sentence = ", length # do this
print newTok # do this
break #stops loop
else:
print length, " is too long"
但这给了我一个无效的语法错误,但我认为不会再次迭代以找到另一个句子。
任何建议都会很棒。
解决方案
获取令牌列表后:
tok = tokenizer.tokenize(data); #breaks into sentences
...其余的是单线:
newTok = random.choice([x for x in tok if len(x)<280])
请注意,使用带有 an 的列表推导可以if
将令牌列表中的项目缩小到长度小于 280 个字符的项目。
推荐阅读
- reactjs - 反应组件中的 Typscript 可选参数
- salesforce - 使用 force:recordData 将记录添加到 Salesforce 中的 Campaign 对象
- excel - 如何将单元格或范围传递到 InStr?
- excel - .copy 在将当前工作簿复制到新工作簿时工作不一致
- algorithm - 是否存在通过已知因果元组的顺序应用来达到目标的既定算法?
- python - 在 SQLite3、Python 中按周选择数据
- sql-server - 表中连续行之间的差异
- python - 有没有办法从(Egnyte)云驱动器链接自动下载文件?
- angular - 如何配置 Angular 以从库中捆绑 SCSS 文件?
- python - python中带有百分比标签的圆形条形图