2011-12-17 4 views
0

정규식을 통해 단어 문자열을 단어 목록으로 분할하려고합니다. 나는 여전히 정규 표현식을 가진 초보자이다.구두점을 포함하여 구두점을 포함한 문자열 나누기

저는 nltk.regex_tokenize를 사용하고 있습니다. 결과는 가까운 곳에 있지만, 원하는 것은 아닙니다.

>>> import re, codecs, nltk 
>>> sentence = "détesté Rochard ! m'étais à... 'C'est hyper-cool.' :) :P"  
>>> pattern = r"""(?x) 
    #words with internal hyphens 
    | \w+(-\w+)* 
    #ellipsis 
    | \.\.\. 
    #other punctuation tokens 
    | [][.,;!?"'():-_`] 
    """ 
>>> nltk.regexp_tokenize(sentence.decode("utf8"), pattern) 
[u'd\xe9test\xe9', u'Rochard', u'!', u'm', u"'", u'\xe9tais', u'\xe0', u'qu', u"'", u'on', u'...', u"'", u'C', u"'", u'est', u'hyper-cool', u'.', u"'", u':', u')', u':', u'P'] 

나는 다음과 같은 출력을 가지고 싶다 :

[u'd\xe9test\xe9', u'Rochard', u'!', u"m'", u'\xe9tais', u'\xe0', u"qu'", u'on', u'...', u"'", u"C'", u'est', u'hyper-cool', u'.', u"'", u':)', u':P'] 

나는 "이모티콘"에 대한 해결 방법을, 그래서 내가 '무엇을

내가 지금까지 무엇을 가지고 가장 중요한 것은 따옴표입니다.

답변

1

이 원하는 출력이 입력 문장

  1. [u"qu'", u'on']와 일치하지 않는 것 같습니다 : 나는 한 곳이 두 경기는 문장에서 결정되었다에서 알아낼 수 없습니다
  2. u'.'
  3. 아니었다 부분 u'hyper-cool'의 (당신이 단어의 일부로 문장 부호를 원하는 가정.
  4. u"'"
  5. u"C'"의 일부가 아니 었습니다. (이 단어의 일부로 문장 부호를 원하는 가정.

또한 정규식 분할을 원할 경우 nltk를 사용하여 줄을 분리하는 이유가 무엇입니까? 나는 nltk에 대한 경험이 없으므로 단지 regex 해결책을 제안 할 것입니다.

>>> sentence 
u"d\xe9test\xe9 Rochard ! m'\xe9tais \xe0... 'C'est hyper-cool.' :) :P" 
>>> pattern=re.compile(
    u"(" #Capturing Group 
    "(?:" #Non Capturing 
    "[\.\.\.\]\[\.,;\!\?\"\'\(\):-_`]?" #0-1 punctuation 
    "[\w\-]+"       #Alphanumeric Unicode Word with hypen 
    "[\.\.\.\]\[\.,;\!\?\"\'\(\):-_`]?" #0-1 punctuation 
    ")" 
    "|(?:[\.\.\.\]\[\.,;\!\?\"\'\(\):-_`]+)" #1- punctuation 
    ")",re.UNICODE) 
>>> pattern.findall(sentence) 
[u'd\xe9test\xe9', u'Rochard', u'!', u"m'", u'\xe9tais', u'\xe0.', u'..', u"'C'", u'est', u'hyper-cool.', u"'", u':)', u':P'] 

당신이 캡처 그룹, 비 캡처 그룹, 문자 클래스, 유니 코드 일치에 대한 자세한 정보가 필요하면이 당신

을 위해 작동하는지 확인하고 findall은 난 당신이 re 패키지에 대한 피상적 인 눈을 제안 파이썬. 또한이 시나리오에서 여러 줄로 된 문자열을 계속 사용하는 것이 적합한 지 여부는 확실하지 않습니다. 여러 줄로 된 문자열이 아닌 문자열을 나누는 것에 대한 자세한 정보가 필요하면 this을 살펴보십시오.