2015-05-02 3 views
4

Я занимаюсь анализом текста с использованием tm_map в R. Я запускаю следующий код (без ошибок) для создания Матрицы документов (из исходной и другой предварительно обработанной) слова.Как увидеть оригинальные слова, которые сопоставлены с конкретным строковым словом

corpus = Corpus(VectorSource(textVector)) 
    corpus = tm_map(corpus, tolower) 
    corpus = tm_map(corpus, PlainTextDocument) 
    corpus = tm_map(corpus, removePunctuation) 
    corpus = tm_map(corpus, removeWords, c(stopwords("english"))) 
    corpus = tm_map(corpus, stemDocument, language="english") 

    dtm = DocumentTermMatrix(corpus) 
    mostFreqTerms = findFreqTerms(dtm, lowfreq=125) 

Но когда я смотрю на моем (стебли) mostFreqTerms, я вижу пару, которая заставляет меня думать, «гм, какие слова были стебли производить что?» Кроме того, могут быть слова, которые имеют смысл для меня на первый взгляд, но, возможно, мне не хватает того факта, что на самом деле они содержат слова с разными значениями.

Я хотел бы применить стратегию/технику, описанную в этом SO ответа на сохранение конкретных условий во время вытекающих (например, сохраняя «естественный» и «натурализоваться» стать такими же стеблями термина. Text-mining with the tm-package - word stemming

Но сделайте это наиболее полно, я бы хотел увидеть список всех отдельных слов, которые были сопоставлены с моими наиболее часто встречающимися словами стека. Есть ли способ найти слова, которые, когда возникли, составили мой список самых FreqTerms?

РЕДАКТИРОВАТЬ: ПРОЧИЕ ПРИМЕР

textVector = c("Trisha Takinawa: Here comes Mayor Adam West 
       himself. Mr. West do you have any words 
       for our viewers?Mayor Adam West: Box toaster 
       aluminum maple syrup... no I take that one 
       back. Im gonna hold onto that one. 
       Now MaxPower is adding adamant 
       so this example works") 

     corpus = Corpus(VectorSource(textVector)) 
     corpus = tm_map(corpus, tolower) 
     corpus = tm_map(corpus, PlainTextDocument) 
     corpus = tm_map(corpus, removePunctuation) 
     corpus = tm_map(corpus, removeWords, c(stopwords("english"))) 
     corpus = tm_map(corpus, stemDocument, language="english") 

     dtm = DocumentTermMatrix(corpus) 
     mostFreqTerms = findFreqTerms(dtm, lowfreq=2) 
     mostFreqTerms 

... Вышеуказанные mostFreqTerms выходов

[1] «адам», «один», «запад»

Я ищу программный способ определить, что стволовые слово «адам «пришли из оригинальных слов« адам »и« непреклонный ».

+1

Я не знаю, как увидеть какие конкретные слова в вашем корпусе возникают, но вы можете заглянуть в списки эквивалентов на сайте '' snowball' (http: // snowball.tartarus.org/texts/stemmersoverview.html). Вот, например, [английский список] (http://snowball.tartarus.org/algorithms/porter/diffs.txt). – scoa

+0

Это поможет, если вы предоставили [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) для тестирования. – MrFlick

+0

hm, кто-то написал на SO-ссылке ниже, что «например,« университет »и« универсальный »становятся« универсальными »после того, как они заканчиваются, и вы ничего не можете сделать, чтобы восстановить его правильно». http://stackoverflow.com/questions/25160521/converting-stemmed-word-to-the-root-word-in-r?rq=1 –

ответ

1

Здесь вы можете увидеть, что слово «запад» из слова «запад» происходит от слов «запад», «запад» и «Вестер».

import nltk 

from nltk.tokenize import word_tokenize 
from nltk.corpus import stopwords 
from nltk.stem import RSLPStemmer 
import string 

st = RSLPStemmer() 
punctuations = list(string.punctuation) 
textVector = "Trisha Takinawa: Here comes Mayor adams West himself. Mr. \ 
      West do you have any words for our viewers?Mayor Adam Wester: \ 
    Box toaster aluminum maple syrup... no I take that one back. Im gonna hold \ 
    onto that one. Now MaxPower is adding adamant so this example works" 

tokens = word_tokenize(textVector.lower()) 
tokens = [w for w in tokens if not w in punctuations] 
filtered_words = [w for w in tokens if not w in stopwords.words('english')] 
steammed_words = [st.stem(w) for w in filtered_words ] 

allWordDist = nltk.FreqDist(w for w in steammed_words) 

for w in allWordDist.most_common(2): 
    for i in range(len(steammed_words)): 
     if steammed_words[i] == w[0]: 
      print str(w[0])+"="+ filtered_words[i] 

запад = запад

запад = запад

запада = Wester

объявления = Адамс

объявления = адам

Смежные вопросы