2017-02-07 2 views
0

파이썬에서 nltk로 정규 표현식 토크 나이저를 구현하고 싶지만 다음과 같은 문제점이 있습니다. 내 정규식을 작성하려면 this page을 사용합니다. 올바른 nltk 정규식 토크 나이저를 파이썬으로 작성하려면 어떻게해야합니까?

import string 
import nltk 
from nltk.tokenize import RegexpTokenizer 
from nltk.corpus import stopwords 

def preprocess(sentence): 
    sentence = sentence.lower() 
    pattern = r'''(?x)   # set flag to allow verbose regexps 
     (?:[A-Z]\.)+  # abbreviations, e.g. U.S.A. 
    | \w+(?:-\w+)*  # words with optional internal hyphens 
    | \$?\d+(?:\.\d+)?%? 
    | \$?\d+%? 
    |/\m+(?:[-'/]\w+)* 
    ''' 
    tokenizer = RegexpTokenizer(pattern) 
    tokens = tokenizer.tokenize(sentence) 
    print tokens 

str= 'i have one 98% 0.78 gener-alized 22 rule /m/0987hf /m/08876 i nees packages' 
preprocess(str) 

나는 내가 숫자를 제거하려면 나는 정규 표현식에 무엇을 작성해야,

['i', 'have', 'one', '98%', '0.78', 'gener_alized', '22', 'rule', '/m/0987hf', '/m/08876', 'l', 'need', 'packages' ] 

또한이 결과를 원하는이

['i', 'have', 'one', '98', '0', '78', 'gener-alized', '22', 'rule', '/m/0987hf', '/m/08876', 'i', 'nees', 'packages'] 

있어?

+0

는 Btw는 : 귀하의 약어 서브 패턴'(? :. [AZ] \) +는'결코 당신이 경우에 발생하려고하지 않습니다 소문자로 된 문장을 토큰 화자에게 보냅니다. – lenz

답변

1

\w은 프로그래밍 언어로 식별자를 구문 분석하도록 설계되었으므로 숫자가 포함되어 있습니다.

또한 주문 목록이 대안 목록에서 중요하다는 것을 알고 있어야합니다. 가장 구체적인 것이 먼저, 그 다음에보다 일반적인 것이 있습니다. 당신의 예에서

은, 패턴, \w+(?:-\w+)*에서 두 번째 대안은 이미 "98%"에서 "98" 또는 "0.78"에서 "0" 일치합니다. 이러한 조각이 일치하면 "%" 또는 점 ".78"에 일치하는 패턴이 없으므로 tokeniser가 토큰 구분 기호로 건너 뜁니다.

따라서이 경우 숫자와 관련된 하위 패턴을 \w 앞에 두어야합니다. 그렇지 않으면 숫자 일치를 "훔칩니다".

영문자에 대해서만 문자 클래스 단축키는 없습니다 (숫자의 경우 \d 등). 나는 "\w에 없거나 밑줄이없고 \w의 모든 문자와 같지만 밑줄이없는 모든 문자는 \w이거나 \d입니다."라는 의미의 [^\W\d_]을 사용했습니다. . 그러나 쉽게 해석 할 수있는 표현은 아닙니다.

(. 당신이 ["Na", "ve"]"Naïve"을 tokenise 괜찮습니다 생각한다면 물론 당신이 [A-Za-z]을 사용할 수 있습니다)

+0

이 방법으로 숫자 관련 하위 패턴을 결합합니다. \ $? \ d + %? (, |. \ d +) *'. _98 %, 0.78, 22_ 같은 모든 숫자를 내 문자열에서 제거하려면 어떻게합니까? – user3092781

+0

@ user3092781 토큰 중 숫자를 반환하지 않으려면이 하위 패턴을 생략하십시오. 일치하지 않는 것은 토큰 구분자로 간주되며 결과에서 생략됩니다. – lenz

+0

@lenz 숫자는'\ w + (? : - \ w +) *'와 일치하고 그 결과는 98 0 78 22입니다. – user3487667

관련 문제