Python 2.7:从文本中检测表情符号

时间:2015-02-03 02:12:47

标签: unicode emoji

我希望能够在文本中检测表情符号并查找其名称。

我使用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制作自己的查找表。 对其他想法感兴趣...这个似乎可以做到。

2 个答案:

答案 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)