衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python替換字符串的新方法

Linux愛好者 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Ckend ? 2022-04-09 16:37 ? 次閱讀
Python替換字符串的新方法

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

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

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

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

1.準(zhǔn)備

pip install flashtext

2.基本使用

提取關(guān)鍵詞

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

fromflashtext importKeywordProcessor
# 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的第一個(gè)參數(shù)代表需要被查找的關(guān)鍵詞,第二個(gè)參數(shù)是給這個(gè)關(guān)鍵詞一個(gè)別名,如果找到了則以別名顯示。

替換關(guān)鍵詞

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

fromflashtext importKeywordProcessor
# 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í)別大小寫字母,那么你可以在處理器初始化的時(shí)候設(shè)定sensitive參數(shù):

fromflashtext importKeywordProcessor
# 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的時(shí)候添加span_info=True參數(shù)即可:

fromflashtext importKeywordProcessor
# 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ù):

fromflashtext importKeywordProcessor
# 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)鍵詞有兩種方法,一種是通過(guò)詞典,一種是通過(guò)數(shù)組:

fromflashtext importKeywordProcessor
# 1. 初始化關(guān)鍵字處理器
keyword_processor = KeywordProcessor()
# 2. (第一種)通過(guò)字典批量添加關(guān)鍵詞
keyword_dict = {
"java": ["java_2e", "java programing"],
"product management": ["PM", "product manager"]
}
keyword_processor.add_keywords_from_dict(keyword_dict)
# 2. (第二種)通過(guò)數(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)鍵詞也非常簡(jiǎn)單,和添加類似:

fromflashtext importKeywordProcessor
# 1. 初始化關(guān)鍵字處理器
keyword_processor = KeywordProcessor()
# 2. 通過(guò)字典批量添加關(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. 單個(gè)刪除關(guān)鍵詞
keyword_processor.remove_keyword('java_2e')
# 5. 批量刪除關(guān)鍵詞,也是可以通過(guò)詞典或者數(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.高級(jí)使用

支持額外信息

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

fromflashtext importKeywordProcessor
# 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)鍵詞的時(shí)候,你還能拿到其他一些你想要在得到此關(guān)鍵詞時(shí)輸出的信息。

支持特殊單詞邊界

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

fromflashtext importKeywordProcessor
# 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é)尾

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

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

Python替換字符串的新方法

附 FlashText 與正則相比替換關(guān)鍵詞所花費(fèi)的時(shí)間之比:

Python替換字符串的新方法

這篇文章如果對(duì)你有幫助的話,記得轉(zhuǎn)發(fā)一下哦。

原文標(biāo)題:比正則快 M 倍以上!Python 替換字符串的新姿勢(shì)

文章出處:【微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4630

    瀏覽量

    93356
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    585

    瀏覽量

    20603
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    85039

原文標(biāo)題:比正則快 M 倍以上!Python 替換字符串的新姿勢(shì)

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Labview之搜索替換字符串

    Labview之搜索替換字符串,很好的Labview資料,快來(lái)下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:23 ?0次下載

    Labview之替換字符串

    Labview之替換字符串,很好的Labview資料,快來(lái)下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:43 ?0次下載

    python字符串拼接方式了解

    python字符串拼接的方式 在Python的實(shí)際開發(fā)中,很多都需要用到字符串拼接,python字符串
    發(fā)表于 12-06 10:09 ?1050次閱讀

    python基礎(chǔ)教程之Python學(xué)習(xí)入門字符串的詳細(xì)程序資料說(shuō)明

    Python 字符串操作,如string替換、刪除、截取、復(fù)制、連接、比較、查找、包含、大小寫轉(zhuǎn)換、分割等。
    發(fā)表于 10-30 19:13 ?8次下載

    教你7個(gè)Python判斷字符串是否包含子方法

    教你7個(gè)Python判斷字符串是否包含子方法
    的頭像 發(fā)表于 08-17 10:52 ?5139次閱讀
    教你7個(gè)<b class='flag-5'>Python</b>判斷<b class='flag-5'>字符串</b>是否包含子<b class='flag-5'>串</b>的<b class='flag-5'>方法</b>

    什么是復(fù)制字符串Python如何復(fù)制字符串

    。 在上一篇文章《你真的知道Python字符串怎么用嗎?》里,我突發(fā)奇想,將字符串跟列表做了比較,然后發(fā)現(xiàn)字符串竟然沒有復(fù)制的方法。當(dāng)時(shí)沒
    發(fā)表于 11-25 10:32 ?3055次閱讀

    2.2 python字符串類型

    2.2 python字符串類型 1. 如何定義字符串字符串Python中最常用的數(shù)據(jù)類型之一。 使用單引號(hào)或雙引號(hào)來(lái)創(chuàng)建
    的頭像 發(fā)表于 02-17 17:08 ?1478次閱讀

    Python-字符串

    字符串就是 一字符 ,是編程語(yǔ)言中表示文本的數(shù)據(jù)類型,在Python中使用一對(duì)雙引號(hào) "" 或者一對(duì)單引號(hào)來(lái)定義.
    的頭像 發(fā)表于 02-16 15:05 ?1221次閱讀
    <b class='flag-5'>Python</b>-<b class='flag-5'>字符串</b>

    python字符串序列操作和不可變性

    初識(shí)python字符串序列操作和不可變性。python字符串序列操作為序列通用操作,python字符串
    的頭像 發(fā)表于 02-23 15:01 ?909次閱讀

    python字符串有哪些特定方法

    python字符串序列操作也適用于列表和元組。 python字符串還有獨(dú)有方法,即字符串對(duì)
    的頭像 發(fā)表于 02-23 15:02 ?763次閱讀

    淺析python字符串模式匹配

    python字符串可以通過(guò)re模塊的模式匹配來(lái)處理文本。
    的頭像 發(fā)表于 02-23 15:04 ?2368次閱讀

    Python中檢查字符串包含的方法

    Python 有多種處理字符串方法。今天我們介紹如何檢查一個(gè)字符串中是否包含另一個(gè)字符串
    的頭像 發(fā)表于 05-14 16:02 ?1.6w次閱讀

    Python 如何判斷字符串是否包含子

    方法 使用 字符串 對(duì)象的 find 方法,如果有找到子,就可以返回指定子字符串中的出現(xiàn)
    的頭像 發(fā)表于 11-02 10:55 ?541次閱讀

    python輸出固定長(zhǎng)度的字符串

    Python 是一種強(qiáng)大而靈活的編程語(yǔ)言,具有許多用于處理字符串的功能。在 Python 中,有多種方法可以輸出固定長(zhǎng)度的字符串。下面將詳細(xì)
    的頭像 發(fā)表于 11-22 10:41 ?3452次閱讀

    MySQL替換字符串函數(shù)REPLACE

    MySQL是目前非常流行的開源數(shù)據(jù)庫(kù)管理系統(tǒng)之一,它具有強(qiáng)大的功能和性能。其中之一的字符串函數(shù)REPLACE,可以用于替換字符串中的指定字符字符串
    的頭像 發(fā)表于 11-30 10:44 ?1637次閱讀
    星期8百家乐的玩法技巧和规则| 亿酷棋牌世界| 属鼠和属虎的人能在一起做生意吗| 百家乐打水套利| 保时捷娱乐| 百家乐官网网上真钱赌场娱乐网规则 | 百家乐游戏唯一官网站| 黄金城娱乐城| 百家乐赌场作弊| 面对面棋牌游戏| 海立方百家乐官网的玩法技巧和规则 | 百家乐官网系统足球博彩通| 百家乐输了好多钱| 盛世娱乐| E世博百家乐官网的玩法技巧和规则| 东方太阳城招聘| 百家乐官网路子| 大发888扑克官方下载| 百家乐官网路单| 请问下百家乐去哪个娱乐城玩最好呢| 乐宝百家乐官网娱乐城| 百家乐赌场赌场平台| 百家乐官网是怎样的| 百家乐赌场代理| 太阳城百家乐官网软件| 娱乐城百家乐送白菜| 尚义县| 线上百家乐是如何作弊| 百家乐官网怎样捉住长开| 百家乐tt娱乐场开户注册| 百家乐官网博彩资讯论坛| 威尼斯人娱乐城澳门赌博| 真人百家乐官网游戏软件| 大发888娱乐场下载最高| 神州百家乐官网的玩法技巧和规则 | 百家乐浴盆博彩通排名| 百家乐平玩法几副牌| OG百家乐官网大转轮| 大发888官| 百家乐官网网上娱乐场开户注册| 龙岩棋牌乐|