1

我有一个常规词(“激活”)或通配符(“activat *”)的向量。我想要:

1)计算每个单词在给定文本中出现的次数(即,如果“激活”出现在文本中,“激活”频率将为 1)。

2) 计算每个单词通配符在文本中出现的次数(即,如果“激活”和“激活”出现在文本中,“激活*”频率将为 2)。

我能够实现(1),但不能实现(2)。有人可以帮忙吗?谢谢。

library(tm)
library(qdap)
text <- "activation has begun. system activated"
text <- Corpus(VectorSource(text))
words <- c("activation", "activated", "activat*")

# Using termco to search for the words in the text
apply_as_df(text, termco, match.list=words)

# Result:
#      docs    word.count    activation    activated    activat*
# 1   doc 1             5     1(20.00%)    1(20.00%)           0
4

2 回答 2

1

这可能与版本有关吗?我运行了完全相同的代码(见下文)并得到了你所期望的

    > text <- "activation has begunm system activated"
    > text <- Corpus(VectorSource(text))
    > words <- c("activation", "activated", "activat")
    > apply_as_df(text, termco, match.list=words)
       docs word.count activation activated   activat
    1 doc 1          5  1(20.00%) 1(20.00%) 2(40.00%)

下面是我运行时的输出R.version()。我在 Windows 10 上的 RStudio 版本 0.99.491 中运行它。

    > R.Version()

    $platform
    [1] "x86_64-w64-mingw32"

    $arch
    [1] "x86_64"

    $os
    [1] "mingw32"

    $system
    [1] "x86_64, mingw32"

    $status
    [1] ""

    $major
    [1] "3"

    $minor
    [1] "2.3"

    $year
    [1] "2015"

    $month
    [1] "12"

    $day
    [1] "10"

    $`svn rev`
    [1] "69752"

    $language
    [1] "R"

    $version.string
    [1] "R version 3.2.3 (2015-12-10)"

    $nickname
    [1] "Wooden Christmas-Tree"

希望这可以帮助

于 2016-01-28T18:29:20.993 回答
1

也许考虑使用库的不同方法stringi

text <- "activation has begun. system activated"
words <- c("activation", "activated", "activat*")

library(stringi)
counts <- unlist(lapply(words,function(word)
{
  newWord <- stri_replace_all_fixed(word,"*", "\\p{L}")
  stri_count_regex(text, newWord)
}))

ratios <- counts/stri_count_words(text)
names(ratios) <- words
ratios

结果是:

activation  activated   activat* 
0.2         0.2        0.4 

在我转换*为 \p{L} 的代码中,这意味着正则表达式模式中的任何字母。之后,我计算发现的正则表达式出现。

于 2016-01-28T19:31:39.457 回答