对于所有其他 NLTK 语料库,调用会corpus.raw()从文件中生成原始文本。例如:
>>> from nltk.corpus import webtext
>>> webtext.raw()[:10]
'Cookie Man'
Run Code Online (Sandbox Code Playgroud)
但是,当brown.raw()您打电话时,您会收到带标签的文本。
>>> from nltk.corpus import brown
>>> brown.raw()[:10]
'\n\n\tThe/at '
Run Code Online (Sandbox Code Playgroud)
我已经阅读了我能找到的所有文档,但似乎找不到明显的解释或获取未标记版本的方法。是否有理由对这个语料库进行标记而其他语料库没有?
我正在探索 NLTK 的一些语料库并遇到以下行为:word_tokenize() 和 words 产生不同的 words() 集。
下面是一个使用 webtext 的例子:
from nltk.corpus import webtext
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时,
len(set(word_tokenize(webtext.raw('wine.txt'))))
Run Code Online (Sandbox Code Playgroud)
我得到:3488
当我运行以下命令时,
len(set(webtext.words('wine.txt')))
Run Code Online (Sandbox Code Playgroud)
我得到:3414
我在文档中只能找到 word_tokenize 是标点符号和单词的列表。但它也说单词是标点符号和单词的列表。我想知道,这里发生了什么?他们为什么不同?
我已经尝试查看设置差异。
U = set(word_tokenize(webtext.raw('wine.txt')))
V = set(webtext.words('wine.txt'))
tok_not_in_words = U.difference(V) # in tokenize but not in words
words_not_in_tok = V.difference(U) # in words but not in tokenize
Run Code Online (Sandbox Code Playgroud)
我只能看到 word_tokenize 包含带连字符的单词,而单词将带连字符的单词分开。
任何帮助表示赞赏。谢谢!