检查字符串列中是否存在关键字

时间:2018-08-24 11:17:40

标签: python r

让我们说我有一个像这样的数据帧df

    string
This is a cat
cat is crazy
it drinks milk

,让我们拥有另一个像这样的数据集,该数据集具有关键字和为其分配的标签

 keyword     tag
     cat        43
     dog        34
    crazy       40

因此,我需要检查这些字符串中是否存在关键字,并且需要相应地对其进行标记。所以输出是这样的

 string        keywords_matched      tag
This is a cat      cat                 43
cat is crazy       cat                 43
cat is crazy       crazy               40

有人可以使用R或python解决此问题吗?

预先感谢

2 个答案:

答案 0 :(得分:2)

在“ tidyverse”中,“ unnest”可以帮助您:

string<-c(
"This is a cat",
"cat is crazy",
"it drinks milk")
string <-as.data.frame(string)

df <- read.table(text=
"keyword     tag
 cat        43
 dog        34
crazy       40",header=TRUE,stringsAsFactors=FALSE)


string %>% mutate(keyword_matched=str_split(string,' ')) %>%
  unnest %>% 
  inner_join(df,by=c("keyword_matched"="keyword"))

#         string keyword_matched tag
#1 This is a cat             cat  43
#2  cat is crazy             cat  43
#3  cat is crazy           crazy  40

答案 1 :(得分:1)

这是您问题的答案的 Python版本。这不是不是最高效的方法,但是会按要求完成工作。

import pandas as pd

df1 = pd.DataFrame(["This is a cat", "cat is crazy", "it drinks milk"], columns=["string"])

df2 = pd.DataFrame(["cat", "dog", "crazy"], columns=["keyword"])
df2['tag'] = pd.DataFrame([43, 34, 40])

cols=["string", "keywords_matched", "tags"]
my_values = []

for the_string in df1["string"]:
    for keyword, tag in df2.itertuples(index=False):
        if keyword in the_string:
            my_values.append([the_string, keyword, tag])
        else:
            pass

result = pd.DataFrame(my_values, columns=cols)

应用的逻辑非常简单。我们只需使用嵌套for循环检查字符串中是否存在关键字,然后将获取的结果附加到列表中并进行转换放入数据框

结果:

           string   keywords_matched    tags
0   This is a cat                cat      43
1    cat is crazy                cat      43
2    cat is crazy              crazy      40