首页 > 解决方案 > 从文本文件中选择少于 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" 

但这给了我一个无效的语法错误,但我认为不会再次迭代以找到另一个句子。

任何建议都会很棒。

标签: pythonfilerandomnltk

解决方案


获取令牌列表后:

tok = tokenizer.tokenize(data); #breaks into sentences 

...其余的是单线:

newTok = random.choice([x for x in tok if len(x)<280])

请注意,使用带有 an 的列表推导可以if将令牌列表中的项目缩小到长度小于 280 个字符的项目。


推荐阅读