python flashtext字符串快速替換,自然語言處理加速

在自然語言處理當中,經常對數據集進行一些數據字符的替換,表情的替換,以便在tokenizer的時候不被識別成[unk],造成信息的缺失

常規方法使用python自帶的replace方法實現,但數據量很大時,效率顯得低了

比如下面的代碼,處理60000條數據需要3+小時

from tqdm.notebook import tqdm
emoji_dict = {}
with open('/Users/xinyuuliu/Desktop/data/emoji/emoji_map_full.txt') as f_emoji:
    emojilist = f_emoji.readlines()
    for em in emojilist:
        emoji,emoji_str = em.split(maxsplit=1)
        emoji_dict[emoji] = emoji_str.strip()
#     print(emoji_dict)


bar = tqdm(enumerate(data['text']),total=len(data['text']))

for idx,text in bar:  
    for em in emoji_dict:
        text = text.replace(em,emoji_dict[em])
    data['text'][idx] = text
#     if idx == 10:
#         break
    
 data

可以看到處理6%的數據已經14分鐘了

 

 

如何加速,使用flashtext模塊,如果會異步就更快了,這裏我還沒有實現異步 

pip install flashtext

from flashtext import KeywordProcessor
# 1. 初始化關鍵字處理器
keyword_processor = KeywordProcessor()

# 2. 添加關鍵詞
for em in emoji_dict:
    keyword_processor.add_keyword(em, emoji_dict[em])

# 3. 替換關鍵詞
bar = tqdm(enumerate(data['text']),total=len(data['text']))
for idx,text in bar:  
    data['text'][idx] = keyword_processor.replace_keywords(text)
# 4. 結果
data 

可以看到處理7%的數據用了7分鐘,明顯比replace快了一倍

 

 

看下替換效果:

 

 替換完後的數據:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章