對於正則表達式的替換,算法的時間復雜度還需要考慮要替換的關鍵字數量(m),因此時間復雜度為O(MxN)。
簡而言之,基於FlashText算法的字符串替換比正則表達式替換快m倍以上,而這個m就是要替換的關鍵字數量。關鍵詞越多,FlashText算法的優勢越明顯。
以下是如何使用flashtext算法基於Python中的FlashText模塊來查找和替換字符串。如果您認為對您的項目團隊有幫助,請記得轉發給作者。
1.準備好的
在開始之前,您應該確保Python和pip已成功安裝在您的計算機上。如果沒有,您可以訪問這篇文章:超詳細的Python安裝指南進行安裝。
(可選1)如果使用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析和挖掘的好幫手-Anaconda,它內置了Python和pip。
(可選2)此外,建議您使用VSCode編輯器,它有很多優點:Python編程的最佳夥伴-VS代碼詳細指南。
請選擇以下方式之壹輸入命令安裝依賴關系:
在1中打開Cmd(開始-運行-CMD)。Windows環境。
2.MAC OS環境下的開放終端(命令+空格輸入終端)。
3.如果使用VSCode編輯器或Pycharm,可以直接使用界面底部的終端。
pip安裝flashtext
2.基本用途
提取關鍵詞
提取關鍵詞的壹個最基本的例子如下:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
keyword _ processor = keyword processor()
# 2.添加關鍵詞
keyword _ processor . add _ keyword(‘大蘋果’,‘紐約’)
keyword_processor.add_keyword(“灣區”)
# 3.處理目標句子並提取相應的關鍵詞
keywords _ found = keyword _ processor . extract _ keywords(“我愛大蘋果和灣區。”)
# 4.結果
打印(關鍵字_已找到)
#【“紐約”、“灣區”】
其中,add_keyword的第壹個參數表示要搜索的關鍵字,第二個參數是給關鍵字壹個別名,如果找到該關鍵字將顯示為別名。
替換關鍵詞
如果要替換關鍵字,只需調用處理器的replace_keywords函數:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
keyword _ processor = keyword processor()
# 2.添加關鍵詞
keyword _ processor . add _ keyword(‘新德裏’,‘NCR地區’)
# 3.替換關鍵詞
new _ sentence = keyword _ processor . replace _ keywords(“我愛大蘋果和新德裏。”)
# 4.結果
打印(新句子)
#“我愛紐約州和NCR地區。”
關鍵字區分大小寫
如果需要準確提取和識別大寫和小寫字母,可以在處理器初始化時設置敏感參數:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器,註意將case_sensitive設置為TRUE。
keyword_processor =關鍵字處理器(區分大小寫= True)
# 2.添加關鍵詞
keyword _ processor . add _ keyword(‘大蘋果’,‘紐約’)
keyword_processor.add_keyword(“灣區”)
# 3.處理目標句子並提取相應的關鍵詞
keywords _ found = keyword _ processor . extract _ keywords(“我愛大蘋果和灣區。”)
# 4.結果
打印(關鍵字_已找到)
#【‘灣區‘】
標記關鍵字位置
如果您需要獲取關鍵字在句子中的位置,只需添加span_info=True參數來提取_keywords:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
keyword _ processor = keyword processor()
# 2.添加關鍵詞
keyword _ processor . add _ keyword(‘大蘋果’,‘紐約’)
keyword_processor.add_keyword(“灣區”)
# 3.處理目標句子並提取相應的關鍵詞,並標記關鍵詞的開始和結束位置。
keywords _ found = keyword _ processor . extract _ keywords(“我愛大蘋果和灣區。”,span_info= True)
# 4.結果
打印(關鍵字_已找到)
#【(‘紐約‘,7,16),(‘灣區‘,21,29)】
獲取當前所有關鍵詞
如果您需要獲取當前已添加的所有關鍵字,只需調用處理器的get_all_keywords函數:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
keyword _ processor = keyword processor()
# 2.添加關鍵詞
keyword _ processor . add _ keyword(‘J2EE’,‘Java’)
keyword _ processor . add _ keyword(‘colour’,‘color’)
# 3.獲取所有關鍵詞
keyword _ processor . get _ all _ keywords()
# output:{“colour“:“color“,“J2EE“:“Java“}
批量添加關鍵詞
批量添加關鍵字有兩種方式,壹種是通過字典,另壹種是通過數組:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
keyword _ processor = keyword processor()
# 2.(壹)通過字典批量添加關鍵詞
關鍵字_字典= {
“java“:【“Java _ 2e“,“Java編程“】,
“產品管理”:【“項目經理”、“產品經理”】
}
關鍵字處理器。添加關鍵字來源字典(關鍵字字典)
# 2.(二)通過數組批量添加關鍵字
keyword _ processor . add _ keywords _ from _ list(【“Java“,“python“】)
# 3.第壹個提取效果如下
keyword _ processor . extract _ keywords(“我是java_2e平臺的產品經理”)
#輸出【‘產品管理‘,java】
單個或批量刪除關鍵詞。
刪除關鍵字也很簡單,類似於添加:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
keyword _ processor = keyword processor()
# 2.通過字典批量添加關鍵詞
關鍵字_字典= {
“java“:【“Java _ 2e“,“Java編程“】,
“產品管理”:【“項目經理”、“產品經理”】
}
關鍵字處理器。添加關鍵字來源字典(關鍵字字典)
# 3.提取效果如下
print(keyword _ processor . extract _ keywords(‘我是java_2e平臺的產品經理‘))
#【‘產品管理’,‘Java’】
# 4.刪除單個關鍵字
keyword _ processor . remove _ keyword(Java _ 2e)
# 5.批量刪除關鍵字,也是以字典或數組的形式。
keyword _ processor . remove _ keywords _ from _ dict({“產品管理“:【“PM“】})
keyword _ processor . remove _ keywords _ from _ list(【“Java編程“】)
# 6.刪除java編程關鍵字後的效果如下
keyword _ processor . extract _ keywords(“我是java_2e平臺的產品經理”)
#【“產品管理”】
3.高級用途
支持附加信息
如前所述,添加關鍵字時,第二個參數是其別名。事實上,您不僅可以指定別名,還可以將額外信息放入第二個參數:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
kp = KeywordProcessor()
# 2.添加帶有附加信息的關鍵詞
KP . add _ keyword(‘泰姬陵’,(‘紀念碑’,‘泰姬陵’)
KP . add _ keyword(‘德裏‘,(‘位置‘,‘德裏‘))
# 3.效果如下
kp.extract_keywords(“泰姬陵在德裏。”)
#【(‘紀念碑’,‘泰姬陵’),(‘地點’,‘德裏’)】
這樣,在提取關鍵字時,您還可以獲得壹些其他信息,這些信息是您在獲得該關鍵字時想要輸出的信息。
支持特殊單詞邊界
Flashtext檢測到的單詞邊界通常限於除w【A-Za-z0-9 _】以外的任何字符,但如果您想添加壹些特殊字符作為單詞的壹部分,也可以實現:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
keyword _ processor = keyword processor()
# 2.添加關鍵詞
keyword_processor.add_keyword(“大蘋果”)
# 3.正常效應
print(keyword _ processor . extract _ keywords(‘我愛大蘋果/灣區。’))
#【“大蘋果”】
# 4.使用“/”作為單詞的壹部分
keyword _ processor . add _ non _ word _ boundary(“/”)
# 5.優化效果
print(keyword _ processor . extract _ keywords(‘我愛大蘋果/灣區。’))
# []
結束
個人認為這個模塊已經滿足了我們的基本使用。如果您有超出本模塊所提供功能的壹些使用需求,您可以向flashtext提供代碼:
/vi3k6i5/flashtext
使用FlashText與正則化查詢關鍵詞所花時間的比率:
與正則化相比,用FlashText替換關鍵字所花費的時間比率:
如果這篇文章對妳有幫助,記得轉發。