Преобразование множественных существительных в сингулярные существительные

Как множественные существительные могут быть преобразованы в сингулярные существительные, используя R? Я использую функцию tagPOS, которая тегирует каждый текст, а затем извлекает все множественные существительные, которые были помечены как "NNS". Но что делать, если я хочу преобразовать эти множественные существительные в единичные.?


library("openNLP")
library("tm")
acq_o <- "Gulf Applied Technologies Inc said it sold its subsidiaries engaged in pipelines and terminal operations for 12.2 mln dlrs. The company said the sale is subject to certain post closing adjustments, which it did not explain. Reuter."

acq = tm_map(Corpus(DataframeSource(data.frame(acq_o))), removePunctuation)
acqTag <- tagPOS(acq)
acqTagSplit = strsplit(acqTag," ")
qq = 0
tag = 0
for (i in 1:length(acqTagSplit[[1]])){
        qq[i] <-strsplit(acqTagSplit[[1]][i],'/')
        tag[i] = qq[i][[1]][2]
}

index = 0
k = 0
for (i in 1:(length(acqTagSplit[[1]]))) { 
    if (tag[i] == "NNS"){
        k = k +1             
        index[k] = i     
    } 
}
index

Ответ 1

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

Если вы все равно выполняете тегирование, немецкий проект TreeTagger делает хорошую работу по метке и леммему одновременно.

EDIT: tchrist был прав, чтобы напомнить мне, что, каковы бы ни были ваши цели, если вы действительно ищете уникальные поверхностные формы ваших множественных существительных, то для дома, испеченное решение не собирается вообще его обрезать.

И если вы этого не сделаете, Neo_Me (опять же, в комментариях), похоже, нашел пакет, который происходит в R: пакет snowball (RStem, похоже, был прекращен. AFAICT, Snowball заменяет его.)

Это, конечно, реализация или обертка вокруг стримера Портера. Используйте на свой страх и риск, он будет пресекать такие вещи, как жены, или что-то в этом роде.

Мне просто пришло в голову, что R имеет CRAN. В поисках "леммы" я узнал о Java-зависимом пакете wordnet. Кажется, имеет функцию getLemma. Весь пакет, скорее всего, излишний для вас, но все равно может достать вас куда-нибудь, если вы не найдете ничего лучшего.