2016-11-30 2 views
0

'text'열이있는 Excel 파일에서 지정된 단어를 포함하는 문장을 나에게 돌려주는 함수를 정의했습니다. 내가word 토크 나이저의 부분 문자열 일치

words = ['word1','word2','word3'.......] 
df['text'].apply(lambda text: [sent for sent in sent_tokenize(text) 
            if any(True for w in word_tokenize(sent) 
              if w.lower() in searched_words)]) 

다음과 같이 인수로 여러 단어를 통과 할 수 있도록 는 그리고 @Julien Marrec의 도움으로 나는 기능을 재정의 그러나 문제는 비 구조화 (GB의에서 일반적으로) 데이터 세트는 꽤 거대한입니다. 누군가가 나에게 제안 할 수있는 방법은 문장이 'xxxxxword1yyyyy'이면이 함수도이 문장을 반환 할 수 있어야합니다.

+0

하위 단어 일치 (제목에도 해당)에 대한 질문을 이해하지만 데이터 크기와 관련하여 어떤 문제인지 잘 모르겠습니다. 처리 시간이 오래 걸리거나 메모리가 부족합니까? – lenz

+0

@lenz 나는 데이터 크기에 대해서 언급했다. 왜냐하면 많은 시간이 걸리기 때문에 누군가가 형태소 분석을 제안 할 수도 있기 때문이다! 형태소 분석은 일부 전형적인 경우에만 원하는 출력을 줄 것입니다. – user7140275

답변

0

단어 경계에 신경 쓰지 않는다면 단어 토큰 화를 건너 뛰고 정규식과 일치시킬 수 있습니다.

그러나 이것은 예상치 못한 많은 일치를 제공 할 수 있습니다. 예를 들어, "tin"과 "nation"이라는 검색어는 "procrastination"이라는 단어에서 모두 일치합니다. 즉, 당신이 원하는 경우, 다음을 수행 할 수 있습니다

import re 

fsa = re.compile('|'.join(re.escape(w.lower()) for w in searched_words)) 
df['text'].apply(lambda text: [sent for sent in sent_tokenize(text) 
           if fsa.search(sent)]) 

re.compile() 표현은 단순히 대안의 집합으로 구성 정규식 패턴 객체를 생성한다. 전체 문장을 검색하여 동시에 검색 한 단어를 모두 찾아 볼 수 있습니다.

+0

고마워요. 그러나 내 텍스트가 "파이썬은 위험합니다. 두려워"하고 searched_words에는 '파이썬'이 있습니다. "파이썬은 위험합니다."대신에 [파이썬은 위험합니다. 나는 두려워합니다]라는 출력을 얻었습니다. 문장 사이에 공백이 있으면 올바른 출력을 얻고 있습니다. 가능한 경우 나에게 제안하십시오. – user7140275

+0

경계를 제거한다는 생각은 결코 그렇게 생각하지 못했습니다. 고맙습니다. – user7140275

+0

문장 분할을 개선하기 위해 Punkt 문장 토큰을 재교육 할 수 있습니다. 이는 약어를 찾는 데 효과적입니다. 점들이 문장 경계가 아니지만 완전히 멈춘 후에 공백이 누락 된 경우 도움이되는지 확실하지 않습니다. 이 질문에 대해 별도의 질문을 던지십시오. – lenz