2013-09-26 63 views
6

Tôi đã thử trình tạo gốc regex, nhưng tôi nhận được hàng trăm mã thông báo không liên quan. Tôi chỉ quan tâm đến thân cây "chơi". Đây là mã tôi đang làm việc với:Xuất hiện văn bản không có cấu trúc trong NLTK

import nltk 
from nltk.book import * 
f = open('tupac_original.txt', 'rU') 
text = f.read() 
text1 = text.split() 
tup = nltk.Text(text1) 
lowtup = [w.lower() for w in tup if w.isalpha()] 
import sys, re 
tupclean = [w for w in lowtup if not w in nltk.corpus.stopwords.words('english')] 
from nltk import stem 
tupstem = stem.RegexpStemmer('az$|as$|a$') 
[tupstem.stem(i) for i in tupclean] 

Kết quả của việc trên là;

['like', 'ed', 'young', 'black', 'like'...] 

Tôi đang cố gắng để làm sạch .txt file (tất cả chữ thường, loại bỏ từ dừng, vv), bình thường hóa nhiều cách viết một từ vào một và làm một tần số dist/đếm. Tôi biết làm thế nào để làm FreqDist, nhưng bất kỳ gợi ý nào về nơi tôi đang đi sai với gốc?

+0

Không phải là bắt nguồn bình thường bạn đang tìm kiếm? Bạn nói rằng bạn đang gặp rắc rối .. bạn đã thử cái gì? – Spaceghost

+0

Sản lượng mong đợi của bạn là gì? tùy thuộc vào nhiệm vụ của bạn là gì, bạn có thể cần một người làm hư cấu thay vì một cái gốc, xem http://stackoverflow.com/questions/17317418/stemmers-vs-lemmatizers – alvas

Trả lời

11

Có một số thân cây nổi tiếng được mã hóa trước trong NLTK, xem http://nltk.org/api/nltk.stem.html và bên dưới hiển thị ví dụ.

>>> from nltk import stem 
>>> porter = stem.porter.PorterStemmer() 
>>> lancaster = stem.lancaster.LancasterStemmer() 
>>> snowball = stem.snowball.EnglishStemmer() 
>>> tokens = ['player', 'playa', 'playas', 'pleyaz'] 
>>> [porter(i) for i in tokens] 
>>> [porter.stem(i) for i in tokens] 
['player', 'playa', 'playa', 'pleyaz'] 
>>> [lancaster.stem(i) for i in tokens] 
['play', 'play', 'playa', 'pleyaz'] 
>>> [snowball.stem(i) for i in tokens] 
[u'player', u'playa', u'playa', u'pleyaz'] 

Nhưng những gì có thể bạn cần là một số loại một Stemmer regex,

>>> from nltk import stem 
>>> rxstem = stem.RegexpStemmer('er$|a$|as$|az$') 
>>> [rxstem.stem(i) for i in tokens] 
['play', 'play', 'play', 'pley'] 
+0

Tôi đã chỉnh sửa câu hỏi của mình. Y = Tôi đã thử regexStem của bạn và nhận nhiều mã thông báo. Không chắc tôi sẽ sai đâu. – user2221429

+0

thay đổi dòng cuối cùng của bạn thành '[tupstem.stem (i) cho i trong tupclean nếu" pl "trong tupclean và" y "trong tupstem.stem (i)]'. Trong ngôn ngữ học, sự thay đổi nguyên âm xảy ra và giả sử rằng các diphthong vẫn còn và cũng như sự khởi đầu, thì cụm phụ âm "pl" cũng sẽ có mặt trong chính tả. – alvas

+0

đã cố gắng này nhưng nó đã không thực sự làm những gì tôi đã hy vọng nó sẽ làm. dù sao cũng cảm ơn bạn! – user2221429

Các vấn đề liên quan