from nltk.tokenize import sent_tokenize
text = open(path).read().lower().decode("utf8")
sent_tokenize_list = sent_tokenize(text)
tokens = [w for w in itertools.chain(*[sent for sent in sent_tokenize_list])]
最后一行“tokens”返回字符而不是单词。在
为什么是这样?我如何让它返回单词?尤其是考虑根据句子列表来做。在
首先,如果文件在'utf8'中并且您使用Python2,那么在^{} 中使用
encoding='utf8'
参数会更好:如果是Python3,只需:
^{pr2}$一定要看看http://nedbatchelder.com/text/unipain.html
至于标记化,如果我们假设每一行都包含某种类型的段落,这些段落可能由一个或多个句子组成,那么我们希望首先在一个列表中加上首字母,以存储整个文档:
然后我们重复这些行,并将行拆分成句子:
然后我们把句子分成几个记号:
由于我们要更新文档列表以存储标记化的句子,因此我们使用:
不推荐!!!(但仍有可能在一行中):
您是否应该使用
word_tokenize
而不是sent_tokenize
?在http://www.nltk.org/api/nltk.tokenize.html#nltk.tokenize.word_tokenize
因为^{} 返回一个字符串语句列表,^{} 将iterable链接到单个iterable,每次返回一个iterable项,直到它们耗尽为止。实际上,您已经将这些句子重新组合成一个字符串,并在列表理解中对其进行迭代。在
要从句子列表中创建一个单词列表,您可以例如拆分和展平:
这不能处理标点符号,但您最初的尝试也不能。您的原始版本也适用于split:
^{pr2}$请注意,您可以使用生成器表达式而不是列表理解作为参数进行解压缩。更好的方法是使用
chain.from_iterable
:对于标点符号处理,请使用^{} ,而不是}和{}(这当然是一件好事,因为它们实际上是单独的单词,只是收缩了)。在
str.split
。它将返回单词和标点符号作为单独的项,并拆分例如I's
到{相关问题 更多 >
编程相关推荐