我正在尝试将段落拆分为单词。我手上有一个可爱的nltk.tokenize.word_tokenize(已发送),但是帮助(word_tokenize)说:“此标记生成器旨在一次处理一个句子。”
有谁知道如果在段落(即最多5个句子)上使用它会发生什么情况?我本人已经在几段简短的段落中尝试过了,而且似乎行得通,但这并不是结论性的证明。
最佳答案
nltk.tokenize.word_tokenize(text)
只是一个瘦的wrapper function,它调用TreebankWordTokenizer类实例的tokenize
方法,该类显然使用简单的正则表达式来解析句子。
该类的文档指出:
底层的 tokenize
方法本身非常简单:
def tokenize(self, text):
for regexp in self.CONTRACTIONS2:
text = regexp.sub(r'\1 \2', text)
for regexp in self.CONTRACTIONS3:
text = regexp.sub(r'\1 \2 \3', text)
# Separate most punctuation
text = re.sub(r"([^\w\.\'\-\/,&])", r' \1 ', text)
# Separate commas if they're followed by space.
# (E.g., don't separate 2,500)
text = re.sub(r"(,\s)", r' \1', text)
# Separate single quotes if they're followed by a space.
text = re.sub(r"('\s)", r' \1', text)
# Separate periods that come before newline or end of string.
text = re.sub('\. *(\n|$)', ' . ', text)
return text.split()
基本上,该方法通常执行的操作是将句点标记为一个单独的标记(如果它位于字符串的末尾):
>>> nltk.tokenize.word_tokenize("Hello, world.")
['Hello', ',', 'world', '.']
假设字符串是缩写,则落入字符串中的所有句点都被标记为单词的一部分:
>>> nltk.tokenize.word_tokenize("Hello, world. How are you?")
['Hello', ',', 'world.', 'How', 'are', 'you', '?']
只要该行为可以接受,您就可以了。
关于python - 滥用nltk的word_tokenize的后果(已发送),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19373296/