2014-10-12 2 views
2

도움을 주셔서 감사합니다. 나는 극도로 길을 잃었다. 나는 코퍼스를 가져 오려고 시도하고 나서 전체 trigram을 포함하는 첫 번째 열 옆의 빈 열 분포와 상대 빈도가 두 열의 csv 파일로 트라이 그램을 인쇄하도록합니다. 하지만 RegexTokenizer를 잘 이해하지 못합니다. 아래의 코드는 90 %의 길을 얻지 만 RegexTokenizer는 문자를 찾습니다. 따라서 "tr"에서 "do t go"와 같은 연결을 사용하여 구를 나눕니다. "don t go"텍스트를 토큰 화하고 CSV에 쓰려면 NLTK RegexTokenizer를 사용하십시오.

나는 그것을 멈추기 위해 필요합니다. . RegexTokenizer가 없으면 trigrams는 다음과 같이 보입니다. (u'middle ', u'class', u'americans ') RegexTokenizer를 사용하여 u와'사이의 구만 찾을 수 있다고 상상할 수 있습니다. 하기 위해서.

import nltk 
import re 
from nltk.corpus.reader.plaintext import PlaintextCorpusReader 
from nltk import FreqDist 
import math 
from decimal import * 
from nltk.tokenize import RegexpTokenizer, WhitespaceTokenizer 
import csv 

#this imports the text files in the folder into corpus called speeches 
corpus_root = '/Users/root...' 
speeches = PlaintextCorpusReader(corpus_root, '.*\.txt') 

print "Finished importing corpus" 

tokenizer = RegexpTokenizer(r'\w+') 
raw = speeches.raw().lower() 
tokens = tokenizer.tokenize(raw) 
tgs = nltk.trigrams(tokens) 
fdist = nltk.FreqDist(tgs) 
minscore = 200 
numwords = len(raw) 
c = csv.writer(open("TPNngrams.csv", "wb")) 
for k,v in fdist.items(): 
    if v > minscore: 
     rf = Decimal(v)/Decimal(numwords) 
     firstword, secondword, thirdword = k 
     trigram = firstword + " " + secondword + " " + thirdword 
     results = trigram,v,rf 
     c.writerow(results) 
     print firstword, secondword, thirdword, v, rf 

그리고 나는 또한 무작위로이 오류가 점점 계속 :

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa9' in position 0: ordinal not in range(128) 

답변

0

이, 정규식 토크 나이를 해결 같은 것을 사용하여 토크 나이를 교체하려면 : 접속사를 처리

text = "We have 15 billion dollars in gold in our treasury; we don't own an ounce." 
tokenizer = RegexpTokenizer(r'(\w|\')+') 
tokens = tokenizer.tokenize(text) 
# ['We', 'have', '15', 'billion', 'dollars', 'in', 'gold', 'in', 'our', 'treasury', 'we', "don't", 'own', 'an', 'ounce'] 

.

어디에서 오류가 발생했는지는 모르지만 (더 자세한 정보를 제공 할까?) 파이썬이 처리 방법을 모르는 이상한 문자를 가져 오는 것 같습니다. .py 파일의 맨 위에

# -*- coding: utf8 -*- 

을 추가하십시오.

관련 문제