對於正則表達式的替換,算法的時間復雜度還需要考慮要替換的關鍵字個數(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 =關鍵字處理器()
# 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 =關鍵字處理器()
# 2.添加關鍵字
keyword_processor.add_keyword('新德裏',' NCR地區' )
# 3.替換關鍵字
new _ sentence = keyword _ processor . replace _ keywords('我愛大蘋果和新德裏。')
# 4.結果
打印(新句子)
# '我愛紐約和NCR地區'
關鍵字區分大小寫
如果需要準確提取和識別大寫和小寫字母,可以在處理器初始化時設置sensitive參數:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器,註意將case_sensitive設置為TRUE。
keyword _ processor = keyword processor(區分大小寫= True)
# 2.添加關鍵字
keyword_processor.add_keyword('大蘋果','紐約' )
keyword_processor.add_keyword('灣區' )
# 3.處理目標句子並提取相應的關鍵詞
keywords _ found = keyword _ processor . extract _ keywords('我愛大蘋果和灣區。')
# 4.結果
打印(關鍵詞_找到)
# ['灣區']
標記關鍵字位置
如果需要獲取關鍵字在句子中的位置,只需添加span_info=True參數來extract_keywords:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
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 =關鍵字處理器()
# 2.添加關鍵字
keyword _ processor . add _ keyword(“J2EE”、“Java”)
keyword_processor.add_keyword(“顏色”、“顏色”)
# 3.獲取所有關鍵字
關鍵字_處理器. get _所有關鍵字()
# output: {'colour': 'color ',' j2ee': 'Java'}
批量添加關鍵詞
批量添加關鍵字有兩種方式,壹種是通過字典,另壹種是通過數組:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
keyword_processor =關鍵字處理器()
# 2.(壹)通過字典批量添加關鍵詞
關鍵字_字典= {
" java" : [ "java_2e "," java編程"],
“產品管理”:[“項目經理”、“產品經理”]
}
關鍵字_處理器. add _關鍵字_ from _字典(關鍵字_字典)
# 2.(二)通過數組批量添加關鍵字
keyword _ processor . add _ keywords _ from _ list([" Java "," python" ])
# 3.第壹個提取效果如下
keyword _ processor . extract _ keywords('我是java_2e平臺的產品經理' )
# output ['產品管理',' java']
單個或批量刪除關鍵詞。
刪除關鍵字也很簡單,類似於添加:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
keyword_processor =關鍵字處理器()
# 2.通過字典批量添加關鍵詞
關鍵字_字典= {
" java" : [ "java_2e "," java編程"],
“產品管理”:[“項目經理”、“產品經理”]
}
關鍵字_處理器. add _關鍵字_ from _字典(關鍵字_字典)
# 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 =關鍵字處理器()
# 2.添加帶有附加信息的關鍵詞
kp.add_keyword('泰姬陵',('紀念碑','泰姬陵' ))
kp.add_keyword('德裏',('位置','德裏' ))
# 3.效果如下
kp.extract_keywords('泰姬陵在德裏。')
# [('紀念碑','泰姬陵'),('地點','德裏')]
這樣在提取關鍵詞的時候,也可以得到壹些妳得到這個關鍵詞的時候想要輸出的其他信息。
支持特殊單詞邊界
Flashtext檢測到的單詞邊界壹般限於w [A-Za-z0-9_]以外的任何字符,但如果想添加壹些特殊字符作為單詞的壹部分也是可以實現的:
從flashtext導入關鍵字處理器
# 1.初始化關鍵字處理器
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替換關鍵字所花費的時間與正則化所花費的時間之比:
如果這篇文章對妳有幫助,記得轉發。