/ / Використовуйте re.sub для заміни змінної, яка є регулярним виразом, рядком - python

Використовуйте re.sub, щоб замінити змінну заміни, яка є регулярним виражком з рядком - python

Мені потрібно замінити KEY на VAL. Ключ - це регулярний вираз, як імпорт. *, А val - рядок типу "важливо". Я знаю, що цей код непоганий, тому що ключ - це регулярний вираз, але я не міг знайти рішення, яке працює.

#import stem dict
d = {}
with open("Stem rečnik.txt") as f:
for line in f:
key, val = line.split(":")
d[key.replace("n","")] = val.replace("n","")

#define tokenizer
def custom_tokenizer(text):
#split- space
tokens = nltk.tokenize.word_tokenize(text)
#stemmer
for key,val in d.items():
tokens=[token.replace(key,val) for token in tokens]
#remove special characters
tokens=[re.sub(r"[^a-zA-Z0-9]","",token) for token in tokens]
return tokens
cv=CountVectorizer(tokenizer= custom_tokenizer,analyzer ="word",encoding="utf-8", min_df=0, max_df=1.0)
post_textCV= cv.fit_transform(post_text)
df=DataFrame(post_textCV.A, columns=cv.get_feature_names())
print(df.head)

Отже, проблема полягає в цій лінії тут:

tokens=[token.replace(key,val) for token in tokens]

Відповіді:

1 для відповіді № 1

token.replace(key,val) викликає str.replace який є базовим рядком заміни.

Для виклику заміни регулярного виразу просто зробіть це замість цього:

tokens=[re.sub(key,val,token) for token in tokens]

зважаючи на це, це здається досить неефективним, будуючи розуміння списку для кожної пари / валу пари.