如何在python中建立一个正规的表情符号词汇表?
How to build a regular vocabulary of emoticons in python?
我在文件 UTF32.red.codes
中有一个纯文本表情符号代码列表。文件的纯内容是
\U0001F600
\U0001F601
\U0001F602
\U0001F603
\U0001F604
\U0001F605
\U0001F606
\U0001F609
\U0001F60A
\U0001F60B
基于question,我的想法是根据文件的内容创建正则表达式以捕获表情符号。这是我的最小工作示例
import re
with open('UTF32.red.codes','r') as emof:
codes = [emo.strip() for emo in emof]
emojis = re.compile(u"(%s)" % "|".join(codes))
string = u'string to check \U0001F601'
found = emojis.findall(string)
print found
found
始终为空。我哪里错了?我正在使用 python 2.7
您的代码将在 python 3 中运行良好(只需将 print found
修改为 print(found)
)。但是,在 python 2.7 中它不会工作,因为它的 re
模块有一个已知错误(参见 this thread and this issue)。
如果您仍然需要python 2 版本的代码,只需使用regex
模块,可以使用pip2 install regex
安装。使用 import regex
导入它,然后将所有 re.
语句替换为 regex.
(即 regex.compile
和 regex.findall
),仅此而已。它应该工作。
此代码适用于 python 2.7
import re
with open('UTF32.red.codes','rb') as emof:
codes = [emo.decode('unicode-escape').strip() for emo in emof]
emojis = re.compile(u"(%s)" % "|".join(map(re.escape,codes)))
search = ur'string to check \U0001F601'
found = emojis.findall(search)
print found
我在文件 UTF32.red.codes
中有一个纯文本表情符号代码列表。文件的纯内容是
\U0001F600
\U0001F601
\U0001F602
\U0001F603
\U0001F604
\U0001F605
\U0001F606
\U0001F609
\U0001F60A
\U0001F60B
基于question,我的想法是根据文件的内容创建正则表达式以捕获表情符号。这是我的最小工作示例
import re
with open('UTF32.red.codes','r') as emof:
codes = [emo.strip() for emo in emof]
emojis = re.compile(u"(%s)" % "|".join(codes))
string = u'string to check \U0001F601'
found = emojis.findall(string)
print found
found
始终为空。我哪里错了?我正在使用 python 2.7
您的代码将在 python 3 中运行良好(只需将 print found
修改为 print(found)
)。但是,在 python 2.7 中它不会工作,因为它的 re
模块有一个已知错误(参见 this thread and this issue)。
如果您仍然需要python 2 版本的代码,只需使用regex
模块,可以使用pip2 install regex
安装。使用 import regex
导入它,然后将所有 re.
语句替换为 regex.
(即 regex.compile
和 regex.findall
),仅此而已。它应该工作。
此代码适用于 python 2.7
import re
with open('UTF32.red.codes','rb') as emof:
codes = [emo.decode('unicode-escape').strip() for emo in emof]
emojis = re.compile(u"(%s)" % "|".join(map(re.escape,codes)))
search = ur'string to check \U0001F601'
found = emojis.findall(search)
print found