【发布时间】:2016-08-14 16:51:21
【问题描述】:
完全编辑,非常感谢 shayaa 的建议!
在矩阵中的句子中(从 csv 读取),应检测到存储在列表中的单词(从 txt 读取)。
sentences_list <- matrix(c(
"this screen is great",
"this camera is not bad",
"everything good but the camera is awesome",
"everything bad but the camera is awesome",
"battery is ok but the camera is awesome"), ncol = 1)
word_list_one <-list("screen", "camera", "battery")
word_list_two <-list("good", "great", "awesome")
word_list_three <-list("bad", "awful", "poor")
word_list_four <-list("not", "don't", "neither")
one <- apply(sentences_list, 2, function(x) {
str_detect(x, paste(word_list_one, sep = '|', collapse = '|'))
})
two <- apply(sentences_list, 2, function(x) {
str_detect(x, paste(word_list_two, sep = '|', collapse = '|'))
})
three <- apply(sentences_list, 2, function(x) {
str_detect(x, paste(word_list_three, sep = '|', collapse = '|'))
})
four <- apply(sentences_list, 2, function(x) {
str_detect(x, paste(word_list_four, sep = '|', collapse = '|'))
})
可以使用以下代码来查看匹配的单词。 (结果是存储而不是直接显示,因为结果的数量是在事后以某种方式统计的)
row=5
print(sentences_list[row])
c(str_extract(sentences_list[row], paste(word_list_one, sep = '|', collapse = '|')))
c(str_extract(sentences_list[row], paste(word_list_two, sep = '|', collapse = '|')))
c(str_extract(sentences_list[row], paste(word_list_three, sep = '|', collapse = '|')))
c(str_extract(sentences_list[row], paste(word_list_four, sep = '|', collapse = '|')))
对于row=1 和row=2,一切正常,但不适用于以下情况。这是因为只返回来自word_list_x 的句子中的第一个匹配项。我希望代码执行的操作是返回word_list_x 的单词,它与另一个word_list_ 中的单词距离最近。
所以对于row=3in sentences_list 是word_list_two = "good" 的结果,因为它首先被找到。结果应该是word_list_two = "awesome",因为在row=3 的句子中它更接近word_list_one = "camera" 中的结果。
对于row=4in sentences_list 是word_list_three = "bad" 和word_list_two = "awesome" 的结果。因为word_list_two 的结果与word_list_one = "camera" 中的结果的距离更近,所以应该只返回word_list_two = "awesome" 的结果而留下word_list_three = " "blank。
至于row=5in sentences_list 的结果为word_list_one = "battery",因为它是先找到的。结果应该是word_list_one = "camera",因为在row=5 的句子中它更接近word_list_two= "great" 中的结果。
显然,作为一个新手,我对那个项目的规模完全过度紧张,我非常感谢您提供的任何帮助,非常感谢!
【问题讨论】:
-
仅供参考,这不是一个可重现的例子。我无法从头到尾运行您的代码并重现您的结果。我没有带有单词列表的
df。总的来说,data.frame并不是存放您的话的最佳存储库。一个向量是。对于许多单词向量,您需要使用列表。也许您可以再次编辑此问题。 -
非常感谢您的建议,非常感谢!我对 R 和 stackoverflow 仍然很陌生。稍后我将尝试根据可重现的示例来改进这个问题。我对所有存储库并不十分熟悉,但我设法提供了我想在文本中找到的单词列表。至于文本,我不知道如何在我的 csv 文件中读取每个元素的多个句子,而不是 data.frame 或矩阵。矩阵可以吗?
-
嗨@dennis,我有一个简单的问题,如果
sentences_list的最后一个元素是例如“电池很好但相机很棒”,结果会是什么?在这种情况下,您可以检测到来自word_list_one的两个不同单词的距离:“camera”和“battery”,并且两者都会在相同距离处有来自word_list_two的单词:“good”和“awesome”。跨度> -
抱歉回答晚了,刚刚收到邮件。。只要找到 word_list_one 中的两个单词,并且 word_list_two/ 3 中也有两个单词,并且它们之间的距离完全相等,比它应该在发生时简单地计算:)
标签: r