查找字符串和查找之间所有可能的短语匹配 table
Find all possible phrase matches between string and lookup table
我有一个包含一堆文本字符串的数据框。在第二个数据框中,我有一个用作查找的短语列表 table。我想在查找 table.
中搜索所有可能的短语匹配的文本字符串
我的问题是有些短语有重叠的词。例如:“鸡蛋”和“绿鸡蛋”。
library(udpipe)
library(dplyr)
# Download english dictionary
ud_model <- udpipe_download_model(language = "english")
ud_model <- udpipe_load_model(ud_model$file_model)
# Create example data
sample <- data.frame(doc_id = 1, text = "the cat in the hat ate green eggs and ham")
phrases <- data.frame(phrase = c("cat", "hat", "eggs", "green eggs", "ham", "the cat"))
# Tokenize text
x <- udpipe_annotate(ud_model, x = sample$text, doc_id = sample$doc_id)
x <- as.data.frame(x)
x$token <- tolower(x$token)
test_results <- x %>% select(doc_id, token)
test_results$term <- txt_recode_ngram(test_results$token,
compound = phrases$phrase,
ngram = str_count(phrases$phrase, '\w+'),
sep = " ")
# Remove any tokens that don't match a phrase in the lookup table
test_results <- filter(test_results, term %in% phrases$phrase)
在结果中您可以看到返回了“the cat”而不是“cat”,“green eggs”而不是“eggs”。
> test_results$term
[1] "the cat" "hat" "green eggs" "ham"
如何找到文本字符串和查找之间所有可能的短语匹配 table?
我应该补充一点,我不拘泥于任何特定的软件包。我在这里只使用udpipe,因为我对它最熟悉。
我认为您可以简单地使用 grepl
来匹配一个字符串是否在另一个字符串中。从你 apply
grepl
到所有其他匹配模式
# Create example data
sample <- data.frame(doc_id = 1, text = "the cat in the hat ate green eggs and ham")
phrases <- data.frame(phrase = c("cat", "hat", "eggs", "green eggs", "ham", "the cat"))
apply(phrases, 1, grepl,sample$text)
如果你想要你的比赛,你可以:
phrases[apply(phrases, 1, grepl,sample$text),]
但也许 dataframe
类型与短语不是最相关的
我有一个包含一堆文本字符串的数据框。在第二个数据框中,我有一个用作查找的短语列表 table。我想在查找 table.
中搜索所有可能的短语匹配的文本字符串我的问题是有些短语有重叠的词。例如:“鸡蛋”和“绿鸡蛋”。
library(udpipe)
library(dplyr)
# Download english dictionary
ud_model <- udpipe_download_model(language = "english")
ud_model <- udpipe_load_model(ud_model$file_model)
# Create example data
sample <- data.frame(doc_id = 1, text = "the cat in the hat ate green eggs and ham")
phrases <- data.frame(phrase = c("cat", "hat", "eggs", "green eggs", "ham", "the cat"))
# Tokenize text
x <- udpipe_annotate(ud_model, x = sample$text, doc_id = sample$doc_id)
x <- as.data.frame(x)
x$token <- tolower(x$token)
test_results <- x %>% select(doc_id, token)
test_results$term <- txt_recode_ngram(test_results$token,
compound = phrases$phrase,
ngram = str_count(phrases$phrase, '\w+'),
sep = " ")
# Remove any tokens that don't match a phrase in the lookup table
test_results <- filter(test_results, term %in% phrases$phrase)
在结果中您可以看到返回了“the cat”而不是“cat”,“green eggs”而不是“eggs”。
> test_results$term
[1] "the cat" "hat" "green eggs" "ham"
如何找到文本字符串和查找之间所有可能的短语匹配 table?
我应该补充一点,我不拘泥于任何特定的软件包。我在这里只使用udpipe,因为我对它最熟悉。
我认为您可以简单地使用 grepl
来匹配一个字符串是否在另一个字符串中。从你 apply
grepl
到所有其他匹配模式
# Create example data
sample <- data.frame(doc_id = 1, text = "the cat in the hat ate green eggs and ham")
phrases <- data.frame(phrase = c("cat", "hat", "eggs", "green eggs", "ham", "the cat"))
apply(phrases, 1, grepl,sample$text)
如果你想要你的比赛,你可以:
phrases[apply(phrases, 1, grepl,sample$text),]
但也许 dataframe
类型与短语不是最相关的