일련의 텍스트 항목에서 공통 / 중요 구문을 추출하는 방법
MySQL 데이터베이스의 원시 HTML과 같은 일련의 텍스트 항목이 있습니다. 이러한 항목에서 가장 일반적인 구문을 찾고 싶습니다 (가장 일반적인 단일 구문이 아니고 이상적으로는 단어 대 단어 일치를 적용하지 않음).
내 예는 Yelp.com의 리뷰로, 특정 레스토랑에 대한 수백 개의 리뷰 중 3 개 스 니펫을 다음 형식으로 표시합니다.
"햄버거 맛보기"(44 리뷰 중)
예 :이 페이지의 "리뷰 하이라이트"섹션 :
http://www.yelp.com/biz/sushi-gen-los-angeles/
NLTK가 설치되어 있고 약간 놀았지만 솔직히 옵션에 압도당했습니다. 이것은 다소 일반적인 문제처럼 보이며 여기에서 검색하여 간단한 해결책을 찾을 수 없었습니다.
나는 당신이 가장 일반적인 구절을 원하지 않고 가장 흥미로운 코디 를 원한다고 생각합니다 . 그렇지 않으면 일반적인 단어로 구성된 구문이 과도하게 표현되고 흥미롭고 유익한 구문이 줄어들 수 있습니다.
이렇게하려면 기본적으로 데이터에서 n-gram을 추출한 다음 가장 높은 PMI ( point wise mutual information) 를 가진 항목을 찾습니다 . 즉, 우연히 예상했던 것보다 훨씬 더 많이 함께 발생하는 단어를 찾고 싶습니다.
방법에 NLTK의 collocations 코드, 예를 들어,의 (7)에 대한 라인에서이 작업을 수행하는 방법을 설명합니다 :
import nltk
from nltk.collocations import *
bigram_measures = nltk.collocations.BigramAssocMeasures()
trigram_measures = nltk.collocations.TrigramAssocMeasures()
# change this to read in your data
finder = BigramCollocationFinder.from_words(
nltk.corpus.genesis.words('english-web.txt'))
# only bigrams that appear 3+ times
finder.apply_freq_filter(3)
# return the 10 n-grams with the highest PMI
finder.nbest(bigram_measures.pmi, 10)
나는 당신이 찾고있는 것이 덩어리 라고 생각합니다 . NLTK 책의 7 장을 읽 거나 청크 추출 에 대한 내 기사를 읽는 것이 좋습니다 . 이 두 가지 모두 5 장 에서 다루는 품사 태깅에 대한 지식을 가정 합니다.
3 ngram 이상을 얻고 싶다면 이것을 시도 할 수 있습니다. 나는 당신이 html 등과 같은 모든 쓰레기를 제거했다고 가정합니다.
import nltk
ngramlist=[]
raw=<yourtextfile here>
x=1
ngramlimit=6
tokens=nltk.word_tokenize(raw)
while x <= ngramlimit:
ngramlist.extend(nltk.ngrams(tokens, x))
x+=1
아마 내가 한 달 정도이 일을 해왔 기 때문에 그다지 비단뱀 같지는 않지만 도움이 될 수 있습니다!
우선 모든 HTML 태그를 제거해야 할 것입니다 ( "<[^>] *>"를 검색하여 ""로 대체). 그 후, 두 텍스트 항목 사이에서 가장 긴 공통 부분 문자열을 찾는 순진한 접근 방식을 시도 할 수 있지만 매우 좋은 결과를 얻지 못할 것 같습니다. 먼저 단어를 정규화 (기본 형식으로 줄임, 모든 악센트 제거, 모든 것을 소문자 또는 대문자로 설정) 한 다음 분석 하면 더 잘할 수 있습니다 . 다시 말하지만, 수행하려는 내용에 따라 단어 순서 유연성을 허용하면 텍스트 항목을 더 잘 클러스터링 할 수 있습니다. 즉, 텍스트 항목을 정규화 된 단어의 봉투로 취급하고 봉투 내용의 유사성을 측정 할 수 있습니다.
나는 비슷한 (하지만 동일하지 않음) 주제에 댓글을했습니다 여기에 .
'code' 카테고리의 다른 글
EditText.setFocusable (false); (0) | 2020.11.29 |
---|---|
Perl에서 어떻게 단위 테스트를 할 수 있습니까? (0) | 2020.11.28 |
요청 MVC와 구성 요소 MVC의 차이점 (0) | 2020.11.28 |
Ctrl-C는 어떻게 자식 프로세스를 종료합니까? (0) | 2020.11.28 |
클래스 경로 항목 org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER은 내보내지지 않습니다. (0) | 2020.11.28 |