最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用FlashText算法實現(xiàn)替換字符串

 更新時間:2022年03月31日 11:23:29   作者:Python實用寶典  
FlashText算法是由?Vikash?Singh?于2017年發(fā)表的大規(guī)模關(guān)鍵詞替換算法,比正則表達(dá)式替換快M倍以上,這個M是需要替換的關(guān)鍵詞數(shù)量,關(guān)鍵詞越多,F(xiàn)lashText算法的優(yōu)勢就越明顯。本文將詳細(xì)這一算法,需要的可以參考一下

前言

FlashText 算法是由 Vikash Singh 于2017年發(fā)表的大規(guī)模關(guān)鍵詞替換算法,這個算法的時間復(fù)雜度僅由文本長度(N)決定,算法時間復(fù)雜度為O(N)。

而對于正則表達(dá)式的替換,算法時間復(fù)雜度還需要考慮被替換的關(guān)鍵詞數(shù)量(M),因此時間復(fù)雜度為O(MxN)。

簡而言之,基于FlashText算法的字符串替換比正則表達(dá)式替換快M倍以上,這個M是需要替換的關(guān)鍵詞數(shù)量,關(guān)鍵詞越多,F(xiàn)lashText算法的優(yōu)勢就越明顯。

下面就給大家介紹如何在 Python 中基于 flashtext 模塊使用 FlashText 算法進(jìn)行字符串查找和替換,如果覺得對你的項目團(tuán)隊很有幫助,請記得幫作者轉(zhuǎn)發(fā)一下哦。

1.準(zhǔn)備

請選擇以下任一種方式輸入命令安裝依賴

1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。

2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。

3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install flashtext

2.基本使用

提取關(guān)鍵詞

一個最基本的提取關(guān)鍵詞的例子如下:

from?flashtext?import?KeywordProcessor
# 1. 初始化關(guān)鍵字處理器
keyword_processor = KeywordProcessor()
# 2. 添加關(guān)鍵詞
keyword_processor.add_keyword('Big Apple',?'New York')
keyword_processor.add_keyword('Bay Area')
# 3. 處理目標(biāo)句子并提取相應(yīng)關(guān)鍵詞
keywords_found = keyword_processor.extract_keywords('I love Big Apple and Bay Area.')
# 4. 結(jié)果
print(keywords_found)
# ['New York', 'Bay Area']

其中 add_keyword 的第一個參數(shù)代表需要被查找的關(guān)鍵詞,第二個參數(shù)是給這個關(guān)鍵詞一個別名,如果找到了則以別名顯示。

替換關(guān)鍵詞

如果你想要替換關(guān)鍵詞,只需要調(diào)用處理器的 replace_keywords 函數(shù):

from?flashtext?import?KeywordProcessor
# 1. 初始化關(guān)鍵字處理器
keyword_processor = KeywordProcessor()
# 2. 添加關(guān)鍵詞
keyword_processor.add_keyword('New Delhi',?'NCR region')
# 3. 替換關(guān)鍵詞
new_sentence = keyword_processor.replace_keywords('I love Big Apple and new delhi.')
# 4. 結(jié)果
print(new_sentence)
# 'I love New York and NCR region.'

關(guān)鍵詞大小寫敏感

如果你需要精確提取,識別大小寫字母,那么你可以在處理器初始化的時候設(shè)定 sensitive 參數(shù):

from?flashtext?import?KeywordProcessor
# 1. 初始化關(guān)鍵字處理器, 注意設(shè)置大小寫敏感(case_sensitive)為TRUE
keyword_processor = KeywordProcessor(case_sensitive=True)
# 2. 添加關(guān)鍵詞
keyword_processor.add_keyword('Big Apple',?'New York')
keyword_processor.add_keyword('Bay Area')
# 3. 處理目標(biāo)句子并提取相應(yīng)關(guān)鍵詞
keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.')
# 4. 結(jié)果
print(keywords_found)
# ['Bay Area']

標(biāo)記關(guān)鍵詞位置

如果你需要獲取關(guān)鍵詞在句子中的位置,在 extract_keywords 的時候添加 span_info=True 參數(shù)即可:

from?flashtext?import?KeywordProcessor
# 1. 初始化關(guān)鍵字處理器
keyword_processor = KeywordProcessor()
# 2. 添加關(guān)鍵詞
keyword_processor.add_keyword('Big Apple',?'New York')
keyword_processor.add_keyword('Bay Area')
# 3. 處理目標(biāo)句子并提取相應(yīng)關(guān)鍵詞, 并標(biāo)記關(guān)鍵詞的起始、終止位置
keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.', span_info=True)
# 4. 結(jié)果
print(keywords_found)
# [('New York', 7, 16), ('Bay Area', 21, 29)]

獲取目前所有的關(guān)鍵詞

如果你需要獲取當(dāng)前已經(jīng)添加的所有關(guān)鍵詞,只需要調(diào)用處理器的 get_all_keywords 函數(shù):

from?flashtext?import?KeywordProcessor
# 1. 初始化關(guān)鍵字處理器
keyword_processor = KeywordProcessor()
# 2. 添加關(guān)鍵詞
keyword_processor.add_keyword('j2ee',?'Java')
keyword_processor.add_keyword('colour',?'color')
# 3. 獲取所有關(guān)鍵詞
keyword_processor.get_all_keywords()
# output: {'colour': 'color', 'j2ee': 'Java'}

批量添加關(guān)鍵詞

批量添加關(guān)鍵詞有兩種方法,一種是通過詞典,一種是通過數(shù)組:

from?flashtext?import?KeywordProcessor
# 1. 初始化關(guān)鍵字處理器
keyword_processor = KeywordProcessor()
# 2. (第一種)通過字典批量添加關(guān)鍵詞
keyword_dict = {
????"java": ["java_2e",?"java programing"],
????"product management": ["PM",?"product manager"]
}
keyword_processor.add_keywords_from_dict(keyword_dict)
# 2. (第二種)通過數(shù)組批量添加關(guān)鍵詞
keyword_processor.add_keywords_from_list(["java",?"python"])
# 3. 第一種的提取效果如下
keyword_processor.extract_keywords('I am a product manager for a java_2e platform')
# output ['product management', 'java']

單一或批量刪除關(guān)鍵詞

刪除關(guān)鍵詞也非常簡單,和添加類似:

from?flashtext?import?KeywordProcessor
# 1. 初始化關(guān)鍵字處理器
keyword_processor = KeywordProcessor()
# 2. 通過字典批量添加關(guān)鍵詞
keyword_dict = {
????"java": ["java_2e",?"java programing"],
????"product management": ["PM",?"product manager"]
}
keyword_processor.add_keywords_from_dict(keyword_dict)
# 3. 提取效果如下
print(keyword_processor.extract_keywords('I am a product manager for a java_2e platform'))
# ['product management', 'java']
# 4. 單個刪除關(guān)鍵詞
keyword_processor.remove_keyword('java_2e')
# 5. 批量刪除關(guān)鍵詞,也是可以通過詞典或者數(shù)組的形式
keyword_processor.remove_keywords_from_dict({"product management": ["PM"]})
keyword_processor.remove_keywords_from_list(["java programing"])
# 6. 刪除了java programing關(guān)鍵詞后的效果如下
keyword_processor.extract_keywords('I am a product manager for a java_2e platform')
# ['product management']

3.高級使用

支持額外信息

前面提到在添加關(guān)鍵詞的時候第二個參數(shù)為其別名,其實你不僅可以指示別名,還可以將額外信息放到第二個參數(shù)中:

from?flashtext?import?KeywordProcessor
# 1. 初始化關(guān)鍵字處理器
kp = KeywordProcessor()
# 2. 添加關(guān)鍵詞并附帶額外信息
kp.add_keyword('Taj Mahal', ('Monument',?'Taj Mahal'))
kp.add_keyword('Delhi', ('Location',?'Delhi'))
# 3. 效果如下
kp.extract_keywords('Taj Mahal is in Delhi.')
# [('Monument', 'Taj Mahal'), ('Location', 'Delhi')]

這樣,在提取關(guān)鍵詞的時候,你還能拿到其他一些你想要在得到此關(guān)鍵詞時輸出的信息。

支持特殊單詞邊界

Flashtext 檢測的單詞邊界一般局限于 \w [A-Za-z0-9_] 外的任意字符,但是如果你想添加某些特殊字符作為單詞的一部分也是可以實現(xiàn)的:

from?flashtext?import?KeywordProcessor
# 1. 初始化關(guān)鍵字處理器
keyword_processor = KeywordProcessor()
# 2. 添加關(guān)鍵詞
keyword_processor.add_keyword('Big Apple')
# 3. 正常效果
print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))
# ['Big Apple']
# 4. 將 '/' 作為單詞一部分
keyword_processor.add_non_word_boundary('/')
# 5. 優(yōu)化后的效果
print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))
# []

4.結(jié)尾

個人認(rèn)為這個模塊已經(jīng)滿足我們的基本使用了,如果你有一些該模塊提供的功能之外的使用需求,可以給 flashtext 貢獻(xiàn)代碼

附 FlashText 與正則相比 查詢關(guān)鍵詞 所花費的時間之比:

到此這篇關(guān)于Python利用FlashText算法實現(xiàn)替換字符串的文章就介紹到這了,更多相關(guān)Python替換字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中ini配置文件讀寫的實現(xiàn)

    Python中ini配置文件讀寫的實現(xiàn)

    本文主要介紹了Python中ini配置文件讀寫的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python?分支結(jié)構(gòu)詳解

    Python?分支結(jié)構(gòu)詳解

    這篇文章主要介紹了Python?分支結(jié)構(gòu),分支結(jié)構(gòu)包括單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu)等內(nèi)容,下文ui分支結(jié)構(gòu)進(jìn)行詳細(xì)分析,需要的小伙伴可以參考一下
    2022-02-02
  • wxPython學(xué)習(xí)之主框架實例

    wxPython學(xué)習(xí)之主框架實例

    這篇文章主要介紹了wxPython學(xué)習(xí)之主框架應(yīng)用實例,以一個基礎(chǔ)的彈出窗體實例講述了wxPython主框架應(yīng)用程序的實現(xiàn)方法,需要的朋友可以參考下
    2014-09-09
  • pycharm使用anaconda全過程

    pycharm使用anaconda全過程

    這篇文章主要介紹了pycharm使用anaconda全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python編程使用NLTK進(jìn)行自然語言處理詳解

    Python編程使用NLTK進(jìn)行自然語言處理詳解

    這篇文章主要介紹了Python編程使用NLTK進(jìn)行自然語言處理詳解,涉及了nltk和開發(fā)環(huán)境的簡單介紹,以及SentencesSegment,SentencesSegment等內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • python打包pyinstall的實現(xiàn)步驟

    python打包pyinstall的實現(xiàn)步驟

    PyInstaller可將Python代碼打包成單個可執(zhí)行文件,本文主要介紹了python打包pyinstall的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • 18?個?Python?編程技巧,提高工作效率

    18?個?Python?編程技巧,提高工作效率

    這篇文章主要分享的是18個Python編程技巧,文章圍繞?Python的相關(guān)資料展開詳細(xì)全文,對工作中的你了能具有一定的參考價值,需要的朋友可以參考一下,希望對你有所幫助
    2022-01-01
  • Python基于百度API識別并提取圖片中文字

    Python基于百度API識別并提取圖片中文字

    本文主要實現(xiàn)了利用百度 AI 開發(fā)平臺的 OCR 文字識別 API 識別并提取圖片中的文字。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python+Pygame繪制小球的實例詳解

    Python+Pygame繪制小球的實例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Python?Pygame繪制小球(漸變大的小球、自由下落的小球、循環(huán)上下反彈的小球),感興趣的小伙伴可以了解一下
    2022-10-10
  • pandas數(shù)據(jù)合并與重塑之merge詳解

    pandas數(shù)據(jù)合并與重塑之merge詳解

    這篇文章主要介紹了pandas數(shù)據(jù)合并與重塑之merge,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論

缙云县| 琼结县| 万山特区| 四子王旗| 荣成市| 汤阴县| 章丘市| 宾阳县| 金沙县| 高安市| 芦溪县| 翁源县| 高唐县| 灯塔市| 临泉县| 卢湾区| 射阳县| 额济纳旗| 水富县| 永修县| 万全县| 织金县| 杭州市| 额济纳旗| 府谷县| 东安县| 陈巴尔虎旗| 彭水| 广河县| 东阿县| 澄城县| 东丰县| 保山市| 临安市| 石首市| 承德市| 黄山市| 聂荣县| 文水县| 邵阳县| 白沙|