【问题标题】:Which tokenizer can do word tokenization and span tokenization effectively?哪个分词器可以有效地进行词分词和跨分词?
【发布时间】:2021-03-18 09:47:19
【问题描述】:

我有一个由几个句子组成的序列。我希望找到一个有效的工具来进行单词标记化和跨度标记化(查找序列中的字符索引,有时称为偏移量。)。我试过TreebankWordTokenizer,发现它把整个序列当作一个句子。只有最后一个点可以分开。这是一个例子:

from nltk.tokenize import TreebankWordTokenizer
s = "I love apples. You love pears."
l = TreebankWordTokenizer().span_tokenize(s)
print(l)
ts = [s[start:end] for start, end in TreebankWordTokenizer().span_tokenize(s)]
print(ts)

返回:

[(0, 1), (2, 7), (8, 15), (16, 19), (20, 24), (25, 30), (30, 31)]
['I', 'love', 'apples.', 'You', 'love', 'pears', '.']

正如您在第三个标记中看到的那样,点没有分开。

我也试过nltk.word_tokenize(s)。它可以分隔所有标点符号,但它没有跨度标记。

请推荐一些同时具备这两种功能的分词器。谢谢。

【问题讨论】:

    标签: python tokenize


    【解决方案1】:

    看起来word_tokenize() 只需要一个句子。对于您的示例,您可以先尝试使用sent_tokenize()

    from nltk import sent_tokenize
    from nltk.tokenize import TreebankWordTokenizer
    
    s = "I love apples. You love pears."
    ss = sent_tokenize(s)
    ts = [src[start:end] for tok, src in zip(TreebankWordTokenizer().span_tokenize_sents(ss), ss) for start, end in tok]
    print(ts)
    

    输出

    ['I', 'love', 'apples', '.', 'You', 'love', 'pears', '.']
    

    【讨论】:

      猜你喜欢
      • 2019-12-09
      • 2021-12-15
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多