2016-05-18 4 views
1

Может кто-нибудь помочь мне с тем, как найти наиболее часто используемые два и три слова в тексте с помощью R?Найти наиболее часто встречающиеся слова в тексте в R

Мой текст ...

text <- c("There is a difference between the common use of the term phrase and its technical use in linguistics. In common usage, a phrase is usually a group of words with some special idiomatic meaning or other significance, such as \"all rights reserved\", \"economical with the truth\", \"kick the bucket\", and the like. It may be a euphemism, a saying or proverb, a fixed expression, a figure of speech, etc. In grammatical analysis, particularly in theories of syntax, a phrase is any group of words, or sometimes a single word, which plays a particular role within the grammatical structure of a sentence. It does not have to have any special meaning or significance, or even exist anywhere outside of the sentence being analyzed, but it must function there as a complete grammatical unit. For example, in the sentence Yesterday I saw an orange bird with a white neck, the words an orange bird with a white neck form what is called a noun phrase, or a determiner phrase in some theories, which functions as the object of the sentence. Theorists of syntax differ in exactly what they regard as a phrase; however, it is usually required to be a constituent of a sentence, in that it must include all the dependents of the units that it contains. This means that some expressions that may be called phrases in everyday language are not phrases in the technical sense. For example, in the sentence I can't put up with Alex, the words put up with (meaning \'tolerate\') may be referred to in common language as a phrase (English expressions like this are frequently called phrasal verbs\ but technically they do not form a complete phrase, since they do not include Alex, which is the complement of the preposition with.") 

ответ

3

Вот простой базовый R подход к 5 самых частых слов:

head(sort(table(strsplit(gsub("[[:punct:]]", "", text), " ")), decreasing = TRUE), 5) 

#  a the  of  in phrase 
# 21  18  12  10  8 

Что она возвращает это целочисленный вектор с частотой использования и имена вектора соответствуют словам, которые были подсчитаны.

  • gsub("[[:punct:]]", "", text) удалить знаки препинания, так как вы не хотите, чтобы подсчитать, что, я думаю
  • strsplit(gsub("[[:punct:]]", "", text), " ") разбить строку на пространствах
  • table() считать частоту уникальных элементов
  • sort(..., decreasing = TRUE) сортировать их в по убыванию
  • head(..., 5) для выбора только 5 самых популярных слов
+0

Я не уверен, хочет ли пользователь частоты. Проверьте ответ @Manoj Kumar. –

+1

@RonakShah Возможно, вы правы, но в этом случае заголовок вопроса вводит в заблуждение. Этот ответ дает правильное решение в соответствии с названием. Поскольку можно предположить, что только малая часть экспертов по программированию являются специалистами в НЛП, я считаю, что ОП должен был четко сформулировать ожидаемый результат. – RHertel

+0

Спасибо @RonakShah и RHertel, но, безусловно, мой вопрос не вводит в заблуждение. Вы ответили, что мне нужно. Спасибо всем. –

3

Мы можем разделить слова и использовать таблицу, чтобы суммировать частоты:

words <- strsplit(text, "[ ,.\\(\\)\"]") 
sort(table(words, exclude = ""), decreasing = T) 
+1

Я думаю, вы также должны усекать слова «a, the, is» как слова (а также удалить пунктуацию). Хотя это и не нужно для этого вопроса, но это обязательно поможет другим ученикам/практикующим НЛП. Благодарю. –

2

Пакет tidytext делает этот вид вещи довольно просто:

library(tidytext) 
library(dplyr) 

data_frame(text = text) %>% 
    unnest_tokens(word, text) %>% # split words 
    anti_join(stop_words) %>% # take out "a", "an", "the", etc. 
    count(word, sort = TRUE) %>% # count occurrences 

# Source: local data frame [73 x 2] 
# 
#   word  n 
#   (chr) (int) 
# 1  phrase  8 
# 2  sentence  6 
# 3  words  4 
# 4  called  3 
# 5  common  3 
# 6 grammatical  3 
# 7  meaning  3 
# 8   alex  2 
# 9   bird  2 
# 10 complete  2 
# ..   ... ... 

Если вопрос просит подсчетов биграмм и триграмм, tokenizers::tokenize_ngrams полезен:

library(tokenizers) 

tokenize_ngrams(text, n = 3L, n_min = 2L, simplify = TRUE) %>% # tokenize bigrams and trigrams 
    as_data_frame() %>% # structure 
    count(value, sort = TRUE) # count 

# Source: local data frame [531 x 2] 
# 
#   value  n 
#   (fctr) (int) 
# 1  of the  5 
# 2  a phrase  4 
# 3 the sentence  4 
# 4   as a  3 
# 5  in the  3 
# 6  may be  3 
# 7 a complete  2 
# 8 a phrase is  2 
# 9 a sentence  2 
# 10  a white  2 
# ..   ... ... 
+0

Хороший @alistaire короткий и лаконичный для вычисления частоты появления. –

5

Вашего текста:

text <- c("There is a difference between the common use of the term phrase and its technical use in linguistics. In common usage, a phrase is usually a group of words with some special idiomatic meaning or other significance, such as \"all rights reserved\", \"economical with the truth\", \"kick the bucket\", and the like. It may be a euphemism, a saying or proverb, a fixed expression, a figure of speech, etc. In grammatical analysis, particularly in theories of syntax, a phrase is any group of words, or sometimes a single word, which plays a particular role within the grammatical structure of a sentence. It does not have to have any special meaning or significance, or even exist anywhere outside of the sentence being analyzed, but it must function there as a complete grammatical unit. For example, in the sentence Yesterday I saw an orange bird with a white neck, the words an orange bird with a white neck form what is called a noun phrase, or a determiner phrase in some theories, which functions as the object of the sentence. Theorists of syntax differ in exactly what they regard as a phrase; however, it is usually required to be a constituent of a sentence, in that it must include all the dependents of the units that it contains. This means that some expressions that may be called phrases in everyday language are not phrases in the technical sense. For example, in the sentence I can't put up with Alex, the words put up with (meaning \'tolerate\') may be referred to in common language as a phrase (English expressions like this are frequently called phrasal verbs\ but technically they do not form a complete phrase, since they do not include Alex, which is the complement of the preposition with.") 

В Natural Language Processing, фраза 2-слов называются "би-грамм", и фраза 3-слов называются "три-грамм ", и так далее. Как правило, данная комбинация n-слов называется «n-gram».

Во-первых, мы устанавливаем пакет Ngram (доступный на CRAN)

# Install package "ngram" 
install.packages("ngram") 

Тогда мы найдем наиболее частые из двух слов и трех слов фразы

library(ngram) 

# To find all two-word phrases in the test "text": 
ng2 <- ngram(text, n = 2) 

# To find all three-word phrases in the test "text": 
ng3 <- ngram(text, n = 3) 

Наконец, мы будем печатать объекты (ngrams) с использованием различных способов, как показано ниже:

print(ng, output="truncated") 

print(ngram(x), output="full") 

get.phrasetable(ng) 

ngram::ngram_asweka(text, min=2, max=3) 

We C также использовать цепи Маркова лепетать новые последовательности:

# if we are using ng2 (bi-gram) 
lnth = 2 
babble(ng = ng2, genlen = lnth) 

# if we are using ng3 (tri-gram) 
lnth = 3 
babble(ng = ng3, genlen = lnth) 
3

Простейшим?

require(quanteda) 

# bi-grams 
topfeatures(dfm(text, ngrams = 2, verbose = FALSE)) 
##  of_the  a_phrase the_sentence  may_be   as_a  in_the in_common phrase_is 
##   5   4   4   3   3   3   2   2 
## is_usually  group_of 
##   2   2 

# for tri-grams 
topfeatures(dfm(text, ngrams = 3, verbose = FALSE)) 
##  a_phrase_is group_of_words of_a_sentence of_the_sentence for_example_in example_in_the 
##    2    2    2    2    2    2 
## in_the_sentence an_orange_bird orange_bird_with  bird_with_a 
#    2    2    2    2 
+0

Привет Кен. очень хороший .. простой, легкий и несколько строк. Но одно сомнение, может ли оно использоваться для прогнозирования следующих слов? (так же, как клавиатура swiftkey для телефонов Android). и почему существует «подчеркивание (« _ »)« между двумя словами? –

+1

Его можно использовать для предсказания следующего слова, если вы использовали ngrams в предсказательной модели. «_» Является значением по умолчанию для аргумента 'concatenator' для' ngrams() ', который может быть передан в' dfm() '. См. '? Quanteda :: tokenise' или'? Quanteda :: ngrams'. –

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