2017-03-31 33 views
22

考慮以下列表:如何從文本中提取所有表情符號?

a_list = [' me así, bla es se ds '] 

我怎樣才能在新的列表中的所有表情符號,裏面a_list提取:

new_lis = ['  '] 

我試圖用正則表達式,但我沒有所有可能的表情符號編碼。

+0

鏈接在http://stackoverflow.com/q/26568722/674039和http://stackoverflow.com/q/35404144/674039 – wim

回答

29

您可以使用emoji庫。您可以通過檢查是否包含在emoji.UNICODE_EMOJI中來檢查單個代碼點是否是表情符號代碼點。

import emoji 

def extract_emojis(str): 
    return ''.join(c for c in str if c in emoji.UNICODE_EMOJI) 
+0

您可以在**#EmojiCodeSheet ** [這裏](https://github.com/shanraisshan/EmojiCodeSheet)下載字符串/ int格式的emoji列表,以便使用自定義比較器。 – shanraisshan

-2

所有Unicode表情符號及其各自的編碼點均爲here。它們是1F600到1F64F,所以你可以用一個類似範圍的迭代器來構建它們。

+1

這只是一個表情符號特定範圍。還有更多。 – user2357112

3

如果你不想使用外部庫,你可以簡單地使用正則表達式和re.findall()以適當的正則表達式一個Python化的方式找到emojies:

In [74]: import re 
In [75]: re.findall(r'[^\w\s,]', a_list[0]) 
Out[75]: ['', '', '', '', '', ''] 

正則表達式r'[^\w\s,]'是否定字符類,它匹配任何不是單詞字符,空格或逗號的字符。

正如我在評論中提到的,文本通常包含單詞字符和標點符號,通過這種方法很容易處理,對於其他情況,您可以將它們手動添加到字符類中。請注意,由於您可以在字符類中指定一系列字符,所以您甚至可以使它更短且更靈活。

另一種解決方案是使用接受表情符號的字符類([]而不是^)排除非表情符號的否定字符類。由於有很多emojis with different unicode values,您只需要將範圍添加到角色類。如果你想匹配更多的emojies這裏是一個很好的參考包含所有標準的emojies與各自的範圍爲不同的emojies http://apps.timwhitlock.info/emoji/tables/unicode

+0

適用於此特定輸入,但有許多其他非表情符號字符不屬於'\ w','\ s'或逗號類別。 – user2357112

+0

@ user2357112文本通常包含單詞字符和標點符號,通過這種方法很容易處理,對於其他情況,您可以手動將它們添加到字符類中。請注意,由於您可以在字符類中指定一系列字符你甚至可以使它更短,更靈活。 – Kasramvd

+1

您的正則表達式在所有非逗號標點符號中失敗,除此之外。 – user2357112

1

最高評分的答案並不總是工作。例如,標誌emojis將不會被找到。考慮字符串:

s = u'Hello \U0001f1f7\U0001f1fa hello' 

什麼會更好地工作是

import emoji 
emojis_list = map(lambda x: ''.join(x.split()), emoji.UNICODE_EMOJI.keys()) 
r = re.compile('|'.join(re.escape(p) for p in emojis_list)) 
print(' '.join(r.findall(s))) 
0

得到什麼風滾草問的解決方案,是最精彩的答案,user594836的答案之間的混合。這是Python 3.6中適用於我的代碼。

import emoji 
import re 

a_list=[' me así,bla es,se ds '] 

## Create the function to extract the emojis 
def extract_emojis(str): 
    emojis_list = map(lambda x: ''.join(x.split()), emoji.UNICODE_EMOJI.keys()) 
    r = re.compile('|'.join(re.escape(p) for p in emojis_list)) 
    aux=[' '.join(r.findall(s)) for s in a_list] 
    return(aux) 

## Execute the function 
extract_emojis(s) 

## the output 
['  '] 
相關問題