2017-03-31 1 views
22

는 다음 목록을 고려 내가 정규식을 사용하려고텍스트에서 emojis를 모두 추출하는 방법은 무엇입니까? 나는 모든 그림 이모티콘 <code>a_list</code> 내부의 새 목록에서 추출 할 수있는 방법</p> <pre><code>a_list = [' me así, bla es se ds '] </code></pre> <p>:?

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)에있는 string/int 형식으로 다운로드 할 수 있습니다. – shanraisshan

-2

각각의 코드 포인트가있는 모든 유니 코드 이모티콘은 here입니다. 그것들은 1F600에서 1F64F입니다. 그래서 당신은 범위 - 같은 반복자로 그것들 모두를 만들 수 있습니다.

+1

즉, 이모티콘의 특정 범위입니다. 훨씬 더 많습니다. – user2357112

3

당신은 emojies 찾을 수 당신은 단순히 적절한 정규식과 정규 표현식과 re.findall()를 사용할 수있는 파이썬 방법으로, 외부 라이브러리를 사용하지 않는 경우 :

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

정규 표현식을 r'[^\w\s,]'은 단어 문자, 공백 또는 쉼표가 아닌 문자와 일치하는 부정 된 문자 클래스입니다.

내가 언급 한 것처럼 텍스트에는 일반적으로이 방법으로 쉽게 처리 할 수있는 단어 문자와 구두점이 포함되어 있습니다. 다른 경우에는 문자 클래스에 직접 추가 할 수 있습니다. 문자 클래스에서 문자의 범위를 지정할 수 있으므로 더 짧고 유연하게 만들 수도 있습니다.

이모티콘 이외의 제외 된 문자 클래스 대신 다른 솔루션은 이모를 허용하는 문자 클래스 (없이 ^)를 사용합니다. 많은 그림 문자가 있기 때문에 문자 클래스에 범위를 추가하기 만하면됩니다. 더 많은 이모티콘을 찾으려면 여기에 다른 이모티콘에 대한 각각의 범위가있는 모든 표준 이모티콘을 포함하는 좋은 참조가 있습니다. 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 
['  '] 
관련 문제