使用 R 对主题标签进行分词
word segmentation for hashtag using R
我想为hashtag做一个分词。我想在标签中拆分单词。这是我的尝试,但显然没有成功。
我想做什么
- 输入:#sometrendingtopic
- 输出:一些热门话题
我的尝试:
s<- "#sometrendingtopic"
tokenize_character_shingles(s)
tokenize_words(s)
tokenize_characters(s)
我得到了一些信息,但是 python https://whosebug.com/.../r-split-string-by-symbol
感谢未来的想法和指导
所以...这绝对是一项非常重要的任务,我认为一般无法解决。由于您缺少单词之间的分隔符,因此您基本上需要提取子字符串并根据所需语言的字典检查它们。
一种非常粗略的方法,它只会从左到右提取它能找到的最长匹配项,它使用的是 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”显然是这本特定词典中的可能词。
所以:请自行承担使用风险并对此进行改进!
我想为hashtag做一个分词。我想在标签中拆分单词。这是我的尝试,但显然没有成功。
我想做什么
- 输入:#sometrendingtopic
- 输出:一些热门话题
我的尝试:
s<- "#sometrendingtopic"
tokenize_character_shingles(s)
tokenize_words(s)
tokenize_characters(s)
我得到了一些信息,但是 python https://whosebug.com/.../r-split-string-by-symbol 感谢未来的想法和指导
所以...这绝对是一项非常重要的任务,我认为一般无法解决。由于您缺少单词之间的分隔符,因此您基本上需要提取子字符串并根据所需语言的字典检查它们。
一种非常粗略的方法,它只会从左到右提取它能找到的最长匹配项,它使用的是 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”显然是这本特定词典中的可能词。 所以:请自行承担使用风险并对此进行改进!