2014-09-13 2 views
0

문자열을 텍스트로 가져 와서 단어로 나눌 토큰 화 프로그램을 만들고 싶습니다. 이메일 계정, URL, 숫자 및 구두점 기호를 식별 할 수있게하고 싶습니다.nltk를 사용하는 python-simple string 토크 나이저

나는 정규 표현식을 사용했고 나는 각 호기심을 인식하는 패턴을 만들 수 있었다. 예를 들어 이러한 패턴 중 하나를 수행 해달라고 말을 토큰에 난 그냥 분할하는 방법을 알아낼 질수

patternpunctuation="[^\w\s]\s+" 
patternnumber="[0-9]+" 
patternmail="\[email protected]{1}[^\s<>()@]+" 
patternurl="https?://[^\s<>()\"]+|www\.[^\s<>\"]+" 

내가 토큰 화하려는 문자열은 아마도 당신이 원하지 않는

line=" John 32 Smith [email protected] ddfdwww.google.com  fdfdhttp://google.com/index/agroup.html peter murphy alexis xronis 54^ &^&^& % % $ % %^^ ! 68! @ @ # https://facebook.com.edu [email protected] ! @^" 
+0

원하는 출력은 무엇입니까? – alvas

+0

나는 그것을 마치 같은 모양으로하고 싶습니다. 'John'32 'Smith' '[email protected]' 'ddfd' 'www.google.com' 'fdfd' 'http://google.com/index /agroup.html '피터' '머피' '알렉시스' '크로네'54 '' '' '' '' '' '' '' ''% '등 –

답변

0

입니다 그들은 모두 다음 간결체 한자를 달성 할 수있다 찾고있는 공백으로 구분하는 경우

>>> line=" John 32 Smith [email protected] ddfdwww.google.com  fdfdhttp://google.com/index/agroup.html peter murphy alexis xronis 54^ &^&^& % % $ % %^^ ! 68! @ @ # https://facebook.com.edu [email protected] ! @^" 
>>> from nltk import word_tokenize 
>>> word_tokenize(line) 
['John', '32', 'Smith', 'global', '@', 'hotmail.com.gr', 'ddfdwww.google.com', 'fdfdhttp', ':', '//google.com/index/agroup.html', 'peter', 'murphy', 'alexis', 'xronis', '54^', '&', '^', '&', '^', '&', '%', '%', '$', '%', '%', '^', '^', '!', '68', '!', '@', '@', '#', 'https', ':', '//facebook.com.edu', 're', '@', 'dfdffe.gov.gr', '!', '@', '^'] 

: 잘못 모든 이메일을 받고 있기 때문에 word_tokenze를 사용 str.split()와 Y :

['John', '32', 'Smith', '[email protected]', 'ddfdwww.google.com', 'fdfdhttp://google.com/index/agroup.html', 'peter', 'murphy', 'alexis', 'xronis', '54^', '&', '^', '&', '^', '&', '%', '%', '$', '%', '%', '^', '^', '!', '68!', '@', '@', '#', 'https://facebook.com.edu', '[email protected]', '!', '@', '^'] 

그러나 함께 단어 관절을 식별하는 것은 쉬운 일이 아니다 ...

당신은 http, www[email protected]을 물고기 다음과 같은 트릭을 시도하지만,이 점에 유의하시기 바랍니다 수 있습니다 순전히 귀하의 데이터에 맞게 정규식을 수정해야합니다.

re.findall(r'www\.[a-z].*.com', i) # www 
re.findall(r'http:[a-z\/].*.html', i) # http 
re.findall(r'https:[a-z\/].*', i) # https 
re.findall(r'[a-z].*@[a-z].*.gov.[a-z].*', # [email protected] 
+0

꽤 오래 걸렸습니다. 하지만 나는 결국 다음과 같은 패턴을 발견했다. patternpunctuation = "\\. \\. \\."[^ \ w \ s @] " patternnumber = re.compile ("[0-9] + \\. *, * [0-9] + ") patternmail = re.compile ("\\ + @ {1} [^ \ s <>() @] + ") patternurl = re.compile ("https? : // [ ("[A-Za-z] +") 패턴 단어 = re.compile ("[A-Za-z] +") 나는 그들을 결합한다. 한 패턴으로 꽤 잘 작동하는 것 같습니다. 답변 해 주셔서 대단히 감사합니다. –

관련 문제