gpt4 book ai didi

r - 使用短语而不是单个单词在 R 中进行主题建模

转载 作者:行者123 更新时间:2023-12-02 21:01:15 27 4
gpt4 key购买 nike

我正在尝试进行一些主题建模,但希望使用存在的短语而不是单个单词即

library(topicmodels)
library(tm)
my.docs = c('the sky is blue, hot sun', 'flowers,hot sun', 'black cats, bees, rats and mice')
my.corpus = Corpus(VectorSource(my.docs))
my.dtm = DocumentTermMatrix(my.corpus)
inspect(my.dtm)

当我检查我的 dtm 时,它会将所有单词分开,但我希望将所有短语放在一起,即每个短语都应该有一列:天是蓝的烈日花朵黑猫蜜蜂大鼠和小鼠

如何让文档术语矩阵识别短语和单词?它们以逗号分隔

解决方案需要高效,因为我想在大量数据上运行它

最佳答案

您可以尝试使用自定义标记生成器的方法。您将所需的多词术语定义为短语(我不知道执行该步骤的算法代码):

tokenizing.phrases <- c("sky is blue", "hot sun", "black cats")

请注意,不会进行词干提取,因此如果您同时想要“black cats”和“black cat”,那么您将需要输入这两种变体。大小写被忽略。

然后你需要创建一个函数:

    phraseTokenizer <- function(x) {
require(stringr)

x <- as.character(x) # extract the plain text from the tm TextDocument object
x <- str_trim(x)
if (is.na(x)) return("")
#warning(paste("doing:", x))
phrase.hits <- str_detect(x, ignore.case(tokenizing.phrases))

if (any(phrase.hits)) {
# only split once on the first hit, so you don't have to worry about multiple occurrences of the same phrase
split.phrase <- tokenizing.phrases[which(phrase.hits)[1]]
# warning(paste("split phrase:", split.phrase))
temp <- unlist(str_split(x, ignore.case(split.phrase), 2))
out <- c(phraseTokenizer(temp[1]), split.phrase, phraseTokenizer(temp[2]))
} else {
out <- MC_tokenizer(x)
}


out[out != ""]
}

然后,您像往常一样继续创建术语文档矩阵,但这次您通过控制参数将标记化短语包含在语料库中。

tdm <- TermDocumentMatrix(corpus, control = list(tokenize = phraseTokenizer)) 

关于r - 使用短语而不是单个单词在 R 中进行主题建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28270154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com