使用re.sub用字符串替换正则表达式的替换变量

时间:2017-08-18 19:46:19

标签: python

我需要用VAL替换KEY。 Key是一个像import一样的正则表达式。*和val是一个像“important”这样的字符串。 我知道这段代码不好,因为key是正则表达式,但我找不到有效的解决方案。

#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 个答案:

答案 0 :(得分:1)

token.replace(key,val)调用基本字符串替换str.replace

要调用regex replace,请改为:

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

说,这似乎相当无效,重建了每个键/ val夫妇的列表理解。