[英]Tokenizing emojis contiguous to words
我正在尝试标记具有以下两种模式的字符串:
为此,我尝试了nltk
( doc ) 中的word_tokenize()
函数。 但是,当涉及表情符号时,它不会拆分连续的实体。
例如,
from nltk.tokenize import word_tokenize
word_tokenize("Hey, 😍🔥")
输出: ['Hey', ',', '😍🔥']
我想得到: ['Hey', ',', '😍', '🔥']
和
word_tokenize("surprise💥 !!")
输出: ['surprise💥', '!', '!']
我想得到['surprise', '💥', '!', '!']
因此,我在想也许使用特定的正则表达式模式可以解决问题,但我不知道使用什么模式。
尝试使用TweetTokenizer
from nltk.tokenize.casual import TweetTokenizer
t = TweetTokenizer()
>>> t.tokenize("Hey, 😍🔥")
['Hey', ',', '😍', '🔥']
另一个更好的选择是使用SpaCyMoji,因为 NLTK Tweet Tokenizer 无法处理肤色表情符号。
from spacymoji import Emoji
nlp_spacymoji = spacy.load("en_core_web_sm")
emoji = Emoji(nlp_spacymoji, merge_spans=True)
nlp_spacymoji.add_pipe(emoji, first=True)
doc = nlp_spacymoji("One 😂, skintone ✌🏽, cluster 😍🔥, word & emo👍 together")
print([token.text for token in doc])
# expected output
['One', '😂', ',', 'skintone', '✌🏽', ',', 'cluster', '😍', '🔥', ',', 'word', '&', 'emo', '👍', 'together']
对于相同的输入,NLTK Tweet Tokenizer 将产生
['One', '😂', ',', 'skintone', '✌', '🏽', ',', 'cluster', '😍', '🔥', ',', 'word', '&', 'emo', '👍', 'together']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.