【问题标题】:Tokenize Sentences or Tweets with Emoji Skin Tone Modifiers使用表情符号肤色修饰符标记句子或推文
【发布时间】:2021-01-14 15:05:55
【问题描述】:

我想标记包含多个表情符号的推文,并且它们不是空格分隔的。我尝试了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', '????', '????????', '????', '????????']

【问题讨论】:

  • 颜色渐变与 emoji unicode 有什么关系?

标签: python-3.x nlp nltk spacy emoji-tones


【解决方案1】:

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

根据自述文件,您可以执行以下操作:

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(...)

应该可以的。

【讨论】:

  • 这很有帮助。谢谢。你认为正则表达式可以做同样的工作吗?
  • 也许可以,但我不建议这样做,它只会更难使用。
  • 好的,谢谢。我要求的原因是 Spacy 将 I'm 标记为 I'm,这不是我想要的令牌。
  • 除非有很多这样的情况,否则我建议只使用一些后处理来修复 spaCy 令牌。对于像I'm 这样的情况,它应该非常简单。或者,您可以使用 spaCy 将表情符号替换为 EMOJI_HAND 之类的填充标记,然后使用您喜欢的另一个标记器;它会很慢,但会给你很大的控制权。
【解决方案2】:

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

你可以使用 spacy retokenizer 的 merge method 在找到一个 emoji + 其肤色修饰符的标记边界后。

有关如何基于正则表达式模式合并标记,请参阅我的这个答案:https://stackoverflow.com/a/43390171/533399

【讨论】:

    猜你喜欢
    • 2018-06-05
    • 2019-11-02
    • 2019-12-26
    • 2022-06-23
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多