4

我想标记包含多个表情符号的推文,并且它们不是空格分隔的。我尝试了这两种方法NLTK TweetTokenizerSpacy但它们无法标记表情符号肤色修饰符。这需要应用于庞大的数据集,因此性能可能是一个问题。有什么建议么?

您可能需要使用 Firefox 或 Safari 才能看到确切的色调表情符号,因为 Chrome 有时无法呈现它!

# NLTK
from nltk.tokenize.casual import TweetTokenizer
sentence = "I'm the most famous emoji  but what about  and "
t = TweetTokenizer()
print(t.tokenize(sentence))

# Output
["I'm", 'the', 'most', 'famous', 'emoji', '', '', '', 'but', 'what', 'about', '', 'and', '', '', '', '', '', '']

# Spacy
import spacy
nlp = spacy.load("en_core_web_sm")
sentence = nlp("I'm the most famous emoji  but what about  and ")
print([token.text for token in sentence])

Output
['I', "'m", 'the', 'most', 'famous', 'emoji', '', '', '', 'but', 'what', 'about', '', 'and', '', '', '', '', '', '']

预期产出

["I'm", 'the', 'most', 'famous', 'emoji', '', '', '', 'but', 'what', 'about', '', 'and', '', '', '', '']
4

2 回答 2

4

您应该尝试使用spacymoji。它是 spaCy 的扩展和管道组件,可以选择将组合表情符号(如肤色修饰符)合并为单个标记。

根据 README,您可以执行以下操作:

import spacy
from spacymoji import Emoji

nlp = spacy.load('en')
emoji = Emoji(nlp, merge_spans=True) # this is actually the default
nlp.add_pipe(emoji, first=True)

doc = nlp(...)

那应该这样做。

于 2020-09-29T04:02:58.710 回答
1

肤色修饰符只是与表情符号的基本十六进制代码结合使用的一组十六进制代码。这些是肤色修饰符: http ://www.unicode.org/reports/tr51/#Diversity

在此处输入图像描述

在找到作为表情符号 + 其肤色修饰符的标记的边界后,您可以使用 spacy retokenizer 的合并方法。

请参阅我的这个答案,了解如何基于正则表达式模式合并令牌:https ://stackoverflow.com/a/43390171/533399

于 2020-09-29T13:52:31.907 回答