2017-04-17 5 views
0

Rを使用してテキストマイニングに取り組んでいますが、いくつかの単語が焦点キーワードの前に3語以下であるかどうかを確認したいと思います。たとえば、私の焦点キーワードはの互換性であり、という単語がという単語が3語以下であるかどうかを知りたいと思っていました。Rテキストマイニング - キーワードに先行する単語を特定する方法

  • 限られた互換性
  • 限られたX互換
  • 限定XX 互換性
  • :したがって、私は次の組み合わせは、(X =任意の他のワード)が表示された回数に関するテキストでの頻度数を取得したいです

ご提案は大歓迎です。ありがとう。

答えて

0

ここngramsをスキップ見つけることtidytextを使用してのアプローチです:ここで

library(tidyverse) 
library(tidytext) 

x <- 'I am working on text mining using R, I would like to identify if some words precede my focal keyword by three or fewer words. For instance, my focal keyword is compatibility and I wanted to know if the word limited precedes my keyword by three or fewer words. Thus, I wanted to get frequency count in a text regarding how many times the following combination appears (X=any other word): 

limited compatibility 
limited X compatibility 
limited X X compatibility 

Any suggestions are welcome. Thanks.' 

data_frame(x) %>% 
    unnest_tokens(line, x, 'lines') %>% 
    mutate(line_number = row_number()) %>% 
    unnest_tokens(ngram, line, 'skip_ngrams', n = 2, k = 2) %>% 
    filter(grepl('limited', ngram), grepl('compatibility', ngram)) 
#> # A tibble: 3 × 2 
#> line_number     ngram 
#>   <int>     <chr> 
#> 1   2 limited compatibility 
#> 2   3 limited compatibility 
#> 3   4 limited compatibility 
0

は、ベースRと正規表現とアプローチです。
grepRawは、一致する正規表現パターン(引数はall = TRUE)の位置を提供します。この結果の長さは一致の数を提供します。

d <- c(" 
Limited compatibility Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla maximus lobortis 
tellus quis egestas. Donec non dignissim urna. Praesent at commodo ligula. 
Cras laoreet limited compatibility interdum mi nec euismod. Ut interdum odio non sem luctus iaculis. Mauris id sapien limited X XXXX compatibility accumsan, imperdiet justo non,limited compatibility egestas felis. Morbi commodo lectus limited X compatibility scelerisque limited XXX compatibility est bibendum, vel varius tellus vulputate. Aenean dictum accumsan limited X compatibility neque limited X X compatibility sed dictum. Vivamus finibus lacus sit amet iaculis molestie. Fusce enim limited X compatibility sapien, iaculis quis leo non, pellentesque lobortis arcu. Proin commodo limited X XXX XXXXX compatibility velit placerat venenatis mattis. Limited compatibility Curabitur et laoreet ipsum. Limited compatibility 
") 

> length(grepRaw("Limited compatibility", d, ignore.case = TRUE, all = TRUE)) 
[1] 5 
> length(grepRaw("limited \\w+ compatibility", d, ignore.case = TRUE, all = TRUE)) 
[1] 4 
> length(grepRaw("limited (\\w+){2}compatibility", d, ignore.case = TRUE, all = TRUE)) 
[1] 2 
> length(grepRaw("limited (\\w+){3}compatibility", d, ignore.case = TRUE, all = TRUE)) 
[1] 1 

次の正規表現のマッチ「限定されたX互換neque限定XXの互換性」と、これはentended動作ではありません

> length(grepRaw("limited (\\w+){6}compatibility", d, ignore.case = TRUE, all = TRUE)) 
[1] 1 

たぶん、より安全な単一の行にすべての「限定XXの互換性」のパターンを配置します:

d <- gsub("Limited", "\nLimited", d, ignore.case = TRUE) 
d <- gsub("compatibility", "compatibility\n", d, ignore.case = TRUE) 
# writeLines(d) 

これは正しいです

> length(grepRaw("limited (\\w+){6}compatibility", d, ignore.case = TRUE, all = TRUE)) 
[1] 0 
関連する問題