Базовое слово, вытекающее из корневого слова в R - PullRequest
12 голосов
/ 12 июля 2011

Есть ли способ получить базовое слово вместо корневого слова в stemming, используя NLP в R?

Код:

> #Loading libraries
> library(tm)
> library(slam)
> 
> #Vector
> Vec=c("happyness happies happys","sky skies")
> 
> #Creating Corpus
> Txt=Corpus(VectorSource(Vec))
> 
> #Stemming
> Txt=tm_map(Txt, stemDocument)
> 
> #Checking result
> inspect(Txt)
A corpus with 2 text documents

The metadata consists of 2 tag-value pairs and a data frame
Available tags are:
  create_date creator 
Available variables in the data frame are:
  MetaID 

[[1]]
happi happi happi

[[2]]
sky sky

> 

Могу ли я получить базовое слово "happy" (базовое слово) вместо "happi" (корневое слово) для "happyness happies happys", используя R.

Ответы [ 4 ]

2 голосов
/ 12 октября 2011

Вы, наверное, ищете стеммера. Вот некоторые примеры из CRAN Task View: обработка естественного языка :

  • RWeka - это интерфейс к Weka, который представляет собой набор алгоритмов машинного обучения для задач интеллектуального анализа данных, написанных на Java. Особенно полезен в контексте обработки естественного языка его функциональность для токенизации и стеммирования.

  • Snowball предоставляет стеммеры Snowball, которые содержат стеммер Porter и несколько других стеммеров для разных языков. Подробнее смотрите на веб-странице Snowball.

  • Rstem является альтернативным интерфейсом для C-версии алгоритма определения слова Портера.

1 голос
/ 26 февраля 2015

Без хорошего знания морфологии английского языка вам придется использовать существующую библиотеку, а не создавать свой собственный стеммер.

Английский полон неожиданных морфологических сюрпризов, которые могут повлиять как на вероятностные, так и на основанные на правилах модели. Вот некоторые примеры:

  • Удаление префикса in- для удаления суффикса -able , как в обитаемый .
  • Изменение категории слова, как в существительном велосипед в результате использования глагола езда на велосипеде (может влиять на правила, основанные на категориях).
  • Слова с отрицательным значением не могут иметь отрицательных префиксов (вы можете иметь unpretty , но не unugly ).
  • Два слова как составные, как в слове «водитель грузовика» (вы будете рассматривать их как одно слово, когда будете стоять).

В английском языке также есть проблема с I-umlaut, когда такие слова, как мужчины, гуси, ступни, лучшие и множество других слов (все со звуком, похожим на «е»), не могут быть легко найдены. Также может возникнуть проблема с заимствованием иностранных заимствованных слов, таких как automaton .

Использование превосходной формы является хорошим примером исключений:

лучший -> хороший

старшее -> старое

Лемматизатор будет учитывать такие исключения, но будет медленнее. Вы можете ознакомиться с правилами портера Porter, чтобы получить представление о том, что вам нужно, или просто воспользоваться пакетом SnowballC R.

0 голосов
/ 29 декабря 2011

stemCompletion может быть использовано здесь. Это не лучший, но управляемый.

Stemm = tm_map(Txt, stemCompletion, dictionary=Txtt)
inspect(Stemm)

A corpus with 2 text documents

The metadata consists of 2 tag-value pairs and a data frame
Available tags are:
  create_date creator 
Available variables in the data frame are:
  MetaID 

[[1]]
happyness happies happies

[[2]]
sky sky
0 голосов
/ 11 ноября 2011

Когда мне нужно было сделать что-то похожее, я записал свой список слов в текстовый файл и передал его в инструмент веб-запросов English Lexicon Project, а затем проанализировал результат обратно в R. Немного неуклюже, но много хорошие данные доступны из ELP. Для вашего использования, проверьте MorphSP ELP. Для счастья это дает {happy}> ness>

http://elexicon.wustl.edu/query14/query14.asp

...