Проверьте, присутствует ли ключевое слово в столбце строк [закрыто]

Sri Jack спросил: 31 июля 2018 в 09:37 в: python

Предположим, что у меня есть dataframe 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 ответа

Nicolas2 ответил: 31 июля 2018 в 09:57

В '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
Sri Jack ответил: 03 августа 2018 в 06:49
Привет, я не получаю результат. Это вывод, который я получаю [1] отправлено keyword_matched Раздел < 0 rows > (или 0-длина строки. имена)
Nicolas2 ответил: 04 августа 2018 в 05:24
Я попробовал код (скопировать и вставить) на нескольких версиях R: без проблем. Мои версии подразумеваемых пакетов: tidyr_0.7.1 dplyr_0.7.4 stringr_1.2.0
Yash Ghorpade ответил: 31 июля 2018 в 11:16

Это версия Python ответа на ваш вопрос. Это не самый эффективный способ сделать это, но он будет выполнять работу в соответствии с требованиями.

import pandas as pddf1 = 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:
            passresult = pd.DataFrame(my_values, columns=cols)

Примененная логика очень просто Мы просто проверяем, присутствует ли ключевое слово в строке , используя вложенный цикл for, а затем добавляем полученный результат в список и конвертируем это в Dataframe.

Результат:

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