我正在尝试将段落拆分为单词。我手上有一个可爱的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/

10-13 05:49