2017-11-09 1 views
0

Pubmed의 정보를 사용하여 NLTK 자료를 작성하려고합니다.목록에서 NLTK 코퍼스 분류

첫 번째 시도에서 Entrez 패키지를 사용하여 데이터를 검색하는 작은 함수를 성공적으로 만들었고 가져온 문서 제목 (문자열 목록, 제목)을 파일 집합 (각 제목을 새로운 파일)을 사용하고 문서의 범주로 각 'fileid'(즉 파일 이름)를 사용하여 코퍼스를 만들었습니다.

이제 게임을 강화해야합니다. 코퍼스의 각 문서에는 제목, 초록 및 각각의 MeSH 용어가 있어야합니다 (이 마지막으로 코퍼스의 범주를 정의해야합니다. 문서의 이름).

그래서 이제 해결 방법을 모르는 몇 가지 문제가 있습니다. 다음과 같이

1) 내 코퍼스 독자가 간다 : 그것을 이해하기 쉬울 수 있으므로 나는 뒤로 시작됩니다

'cat_pattern'는 fileids 인수에서 범주 이름을 추출하는 정규 표현식입니다
corpus = CategorizedPlaintextCorpusReader(corpus_root, file_pattern, 
             cat_pattern=r'(\w+)_.*\.txt') 

, 즉 파일의 이름. 하지만 이제는 파일 내의 MeSH 용어에서 이러한 범주를 가져와 다음 문제를 야기 할 수 있습니다.

2) Pubmed 쿼리는 처음에 제목 만 가져온 곳에서 정보 배치를 검색합니다. 나는 코퍼스를 생성하는 데 사용할 것입니다.)하지만 이제 제목, 초록 및 MeSH 용어를 검색해야합니다.

papers = [] 

'논문은'모든 검색 기사뿐만 아니라 모든과 제품에 관한 정보를 포함하는 목록을 다음과 같이

의사 코드 뭔가 될 것입니다. 이 전 다음 있다고 가정 해 봅시다 : 목록의 마지막 부분에서, [ 'MH'] (메쉬 용어 목록), I는 코퍼스의 범주를 정의하는 데 사용할 필요가 무엇

out = [] 
for each in range(0, len(papers)): 
    out.append(papers[each]['TI']) 
    out.append(papers[each]['AB']) 
    out.append(papers[each]['MH']) 

있다.

3) 나는 정보의이 3 개 조각 코퍼스를 구축 한 후, 내 분류를 사용할 수 있도록, 또한 어떻게 든이에 정보의 모든 배치를 변환해야합니다 "

# X: a list or iterable of raw strings, each representing a document. 
X = [corpus.raw(fileid) for fileid in corpus.fileids()] 

것을 기억 fileid "는 코퍼스의 각 문서입니다. 이것은 각 문서가 단일 문자열 (제목)로 구성되어 있고 각 "문서"는 제목 ([ 'TI']), 요약 ([ 'AB'])이 있어야하는 첫 번째 프로토 타입의 코드입니다.) 및 메쉬 용어 ([ 'MH'] - 잘 모르겠어요 이것 때문에 다음 코드는 : 여기

# y: a list or iterable of labels, which will be label encoded. 
y = [corpus.categories(fileid)[0] for fileid in corpus.fileids()] 

는 y는 파일 이름이었다 레이블을 나타냅니다, 그리고 지금 MeSH 용어로 레이블이 필요합니다.

어떻게 이런 일이 일어날 지 모르겠다. 아니면 내 지식이 가능한 한 가능하다. 예, NLTK 책 자습서를 읽고 읽었으며, NLTK corpora를 만드는 방법에 대한 많은 페이지 등을 읽었다. 등 ...하지만 아무 것도 할 의도가없는 것 같습니다.

이것은 매우 혼란 스러울 지 모르지만, 나에게 무엇인가를 바꿔야 할 필요가 있다면 알려주십시오.어떤 도움을 주시면 감사하겠습니다 :)

+0

https://stackoverflow.com/questions/10463898/creating-a-custom-categorized-corpus-in-nltk-and-python – alvas

+0

에서 이미 살펴 봤지만 불행히도 도움이되지 않습니다. ,하지만 고마워요. – tanmald

답변

1

cat_pattern 인수는 파일 이름에서 카테고리를 결정할 수있는 경우 편리하지만, 경우에 따라 충분하지 않습니다. 다행히도 파일 카테고리를 지정하는 다른 방법이 있습니다. 귀하의 코퍼스에있는 각 파일의 카테고리를 알아 내고 결과를 파일 corpus_categories (또는 무엇이든간에, 이름이 코퍼스 파일 이름 패턴과 일치하지 않는지 확인하여 그 파일을 배치 할 수있는 특별 프로그램을 작성하십시오 코퍼스 폴더). 그런 다음 cat_pattern 대신 cat_file="corpus_categories"으로 독자를 초기화하십시오.

corpus = CategorizedPlaintextCorpusReader(
          corpus_root, 
          file_pattern, 
          cat_file="corpus_categories") 

범주 파일의 각 줄에는 공백으로 구분 된 파일 이름과 범주가 있어야합니다. 여기에 reuters 코퍼스에 대한 cats.txt에서 조각이다 : 나는 당신이 당신의 질문 3에 달성하기 위해 노력하고 무엇을 아무 생각도 없어

training/196 earn 
training/197 oat corn grain 
training/198 money-supply 
training/199 acq 
training/200 soy-meal soy-oil soybean meal-feed oilseed veg-oil 

는하지만, 그것은 분류 코퍼스를 만드는 무관하다는 꽤 명확한 것 (따라서 별도의 질문으로 질문해야합니다).

+0

나는 결과를 얻으려고 노력할 것입니다. 문제 3)는 y가 라벨/카테고리를 저장할 것이라는 점이지만,이 문제를 해결하기 전에 먼저 1 차 및 2 차 문제를 해결하려고 노력할 것입니다. 고마워요 :) – tanmald

+0

당신은 바로 @alexis였습니다. 팁 주셔서 감사합니다. 이런 종류의 분류에 대해 잘 알고 있습니까? 카테고리에 대한 몇 가지 질문이 있으니 도와 주시면 알려주세요. – tanmald

+0

"분류의 유형"이 무슨 뜻인지는 모르겠지만, 하나 이상의 범주가있는 것을 의미한다면, nltk를 보면서 수집 한 것만 알게됩니다. 더 많은 문제가 있으면 새로운 질문을 적어서 저에게 핑 주석을 남겨주세요. – alexis

관련 문제