我希望能够在文本中检测表情符号并查找其名称。
我使用unicodedata模块没有运气,我怀疑我不是 了解UTF-8惯例。
我猜我需要像utf-8一样加载我的doc,然后打破unicode" strings"成为unicode符号。迭代这些并查找它们。
#new example loaded using pandas and encoding UTF-8
'A man tried to get into my car\U0001f648'
type(test) = unicode
import unicodedata as uni
uni.name(test[0])
Out[89]: 'LATIN CAPITAL LETTER A'
uni.name(test[-3])
Out[90]: 'LATIN SMALL LETTER R'
uni.name(test[-1])
ValueError Traceback (most recent call last)
<ipython-input-105-417c561246c2> in <module>()
----> 1 uni.name(test[-1])
ValueError: no such name
# just to be clear
uni.name(u'\U0001f648')
ValueError: no such name
我通过谷歌查找了unicode符号,它是一个合法的符号。 也许unicodedata模块不是很全面......?
我考虑从here制作自己的查找表。 对其他想法感兴趣...这个似乎可以做到。
答案 0 :(得分:3)
我的问题是将Python2.7用于unicodedata模块。 使用Conda我创建了一个python 3.3环境,现在unicodedata工作 正如所料,我已经放弃了我正在努力的所有奇怪的黑客。
# using python 3.3
import unicodedata as uni
In [2]: uni.name('\U0001f648')
Out[2]: 'SEE-NO-EVIL MONKEY'
感谢Mark Ransom指出我最初没有Mojibake 正确导入我的数据。再次感谢您的帮助。
答案 1 :(得分:0)
这是一种阅读您提供的链接的方法。它是从Python 2翻译出来的,所以可能会出现一两个故障。
import re
import urllib2
rexp = re.compile(r'U\+([0-9A-Za-z]+)[^#]*# [^)]*\) *(.*)')
mapping = {}
for line in urllib2.urlopen('ftp://ftp.unicode.org/Public/emoji/1.0/emoji-data.txt'):
line = line.decode('utf-8')
m = rexp.match(line)
if m:
mapping[chr(int(m.group(1), 16))] = m.group(2)