Сопоставьте и пометьте строку одного столбца с подстрокой другого столбца - PullRequest
0 голосов
/ 07 августа 2020

Мне нужен код Python, который берет строки в столбце x, y и сопоставляет эти подстроки в столбце Z и заменяет подстроки тегированной версией подстрок, как показано ниже

Вход: Подстроки без тегов

    Target  Effect  Sentence
0   "hsp9   "insulin sensitivity" "treatment of fhrs with doxycycline attenuated the decrease in enos and hsp90 expression but did not improve insulin sensitivity."
1   "hsp90"    "apoptosis"   "radicicol, an inhibitor of hsp90, enhances trail-induced apoptosis in human epithelial ovarian carcinoma cells by promoting activation of apoptosis-related proteins."

Вывод: подстроки с тегами

    Target  Effect  Sentence
0   "hsp90"    "insulin sensitivity"   "treatment of fhrs with doxycycline attenuated the decrease in enos and <e1>hsp90</e1> expression but did not improve <e2>insulin sensitivity</e2>."
1   "hsp90"    "apoptosis"    "radicicol, an inhibitor of <e1>hsp90</e1>, enhances trail-induced apoptosis in human epithelial ovarian carcinoma cells by promoting activation of <e2>apoptosis</e2>-related proteins."

Я хотел бы сделать это, используя pandas и фреймы данных. Используйте приведенный выше пример, как я go о выполнении такой задачи.

1 Ответ

0 голосов
/ 08 августа 2020

с apply() и обработка каждого столбца как reg expr совпадение с заменой s, это просто.

import re
data = '''    Target  Effect  Sentence
0   hsp90   insulin sensitivity   "treatment of fhrs with doxycycline attenuated the decrease in enos and hsp90 expression but did not improve insulin sensitivity."
1   hsp90    apoptosis   "radicicol, an inhibitor of hsp90, enhances trail-induced apoptosis in human epithelial ovarian carcinoma cells by promoting activation of apoptosis-related proteins."'''
a = [[t.strip() for t in re.split("  ",l) if t!=""]  for l in [re.sub("([0-9]+[ ])*(.*)", r"\2", l) for l in data.split("\n")]]
df = pd.DataFrame(a[1:], columns=a[0])

df["Sentence"] = df.apply(lambda r: re.sub(f"({r['Effect']})", r"<e2>\1</e2>", 
                          re.sub(f"({r['Target']})", r"<e1>\1</e1>", r["Sentence"])), axis=1)
print(df.to_string(index=False))


output

Target               Effect                                                                                                                                                                                            Sentence
 hsp90  insulin sensitivity                                                "treatment of fhrs with doxycycline attenuated the decrease in enos and <e1>hsp90</e1> expression but did not improve <e2>insulin sensitivity</e2>."
 hsp90            apoptosis  "radicicol, an inhibitor of <e1>hsp90</e1>, enhances trail-induced <e2>apoptosis</e2> in human epithelial ovarian carcinoma cells by promoting activation of <e2>apoptosis</e2>-related proteins."
...