使用 R 对标签进行分词
Posted
技术标签:
【中文标题】使用 R 对标签进行分词【英文标题】:word segmentation for hashtag using R 【发布时间】:2021-10-18 07:50:08 【问题描述】:我想对主题标签进行分词。我想在标签中拆分单词。这是我的尝试,但显然没有成功。
我想做什么
-
输入:#sometrendingtopic
输出:一些热门话题
我的尝试:
s<- "#sometrendingtopic"
tokenize_character_shingles(s)
tokenize_words(s)
tokenize_characters(s)
我得到了一些信息,但它适用于 python https://***.com/.../r-split-string-by-symbol 感谢您对未来的想法和指导
【问题讨论】:
gsub('#','','#sometrendingtopic')
将从“#sometrendingtopic”中删除主题标签,然后您可以继续使用无主题标签的字符对象。
@SametSökel 谢谢,我会试试这个
【参考方案1】:
所以...这绝对是一项非常重要的任务,我认为一般无法解决。由于您在单词之间缺少分隔符,因此您基本上需要提取子字符串并将它们与所需语言的字典进行检查。
一种非常粗略的方法,它只会从左到右提取最长的匹配项,它是使用hunspell
,它专为拼写检查而设计,但可能被“滥用”以解决此任务:
split_words <- function(cat.string)
split <- NULL
start.char <- 1
while(start.char < nchar(cat.string))
result <- NULL
for(cur.char in start.char:nchar(cat.string))
test.string <- substr(cat.string,start.char,cur.char)
test <- hunspell::hunspell(test.string)[[1]]
if(length(test) == 0) result <- test.string
if(is.null(result)) return("")
split <- c(split,result)
start.char <- start.char + nchar(result)
split
input <- c("#sometrendingtopic","#anothertrendingtopic","#someveryboringtopic")
# Clean the hashtag from the input
input <- sub("#","",input)
#apply word split
result <- lapply(input,split_words)
result
[[1]]
[1] "some" "trending" "topic"
[[2]]
[1] "another" "trending" "topic"
[[3]]
[1] "some" "very" "boring" "topic"
请记住,这种方法在很多方面都远非完美:
-
比较慢。
它会从左到右贪婪匹配。因此,例如,如果我们有主题标签
input <- "#averyboringtopic"
结果将是
[[3]]
[1] "aver" "y" "boring" "topic"
因为“aver”显然是这本特定词典中的一个可能词。 所以:使用风险自负并在此基础上进行改进!
【讨论】:
以上是关于使用 R 对标签进行分词的主要内容,如果未能解决你的问题,请参考以下文章