Необходимо заменить некоторые слова в тексте в pandas кадре на основе словаря. Самое главное, обработка текста дела - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть словарь и текст для каждой строки в pandas кадре данных. Необходимо заменить некоторые слова в тексте на основе словаря. Как сделать замену словаря без учета регистра, так как для меня важно поддерживать регистр в выходном тексте, как и в исходном тексте.

import pandas as pd
data = [[{'tothe': 'to the','notifed':'notifed'}, 'We notifed captain , and he went back toThe gate.','We notified captain \
, and he went back to The gate.'],\
       [{'miathank': 'mia thank'}, ' Will you please send me a new IS badge . MIAThank you .',' Will you please send me a \
       new IS badge . MIA Thank you.']]
df = pd.DataFrame(data, columns = ['replace_dict', 'text','modified_text'])

Нужен выводной текст, как в модифицированном тексте, который я использую Python3

1 Ответ

0 голосов
/ 29 февраля 2020
def app(replace_dict, text):
    for word in text.split():
        if word.lower() in replace_dict:
            tmp = list(word.replace(" ", ""))
            value = replace_dict[word.lower()]
            #print(value)
            for index in range(len(value)):
                if value[index] == " ":
                    tmp.insert(index, " ")
                    print(tmp)
            text = text.replace(word, "".join(tmp))
            #print(text)
    return text

df["modified_text"]= df.apply(lambda x: app(x.replace_dict, x.text), axis =1)

если есть изменения, превышающие пробел и верхний регистр, вы можете использовать это

from collections import defaultdict as dd

def app1(replace_dict, text):
    for word in text.split():
        if word.lower() in replace_dict:
            tmp = dd(list)
            for char in word:
                tmp[char.lower()].append(char)
            value = replace_dict[word.lower()]
            retrun_value = value
            for char in value:
                if char.lower() in tmp:
                    retrun_value = retrun_value.replace(char,tmp[char.lower()][0])
                    del tmp[char.lower()][0]
            text = text.replace(word, retrun_value)
            print(text)
    return text

, но это не совсем безопасно, я могу вспомнить, что в нескольких случаях это не сработает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...