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

Python 敏感詞過濾的實(shí)現(xiàn)示例

 更新時(shí)間:2021年08月31日 15:53:11   作者:waws520  
本文主要介紹了Python 敏感詞過濾的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

 一個(gè)簡單的實(shí)現(xiàn)

主要是通過循環(huán)和replace的方式進(jìn)行敏感詞的替換

class NaiveFilter():

    '''Filter Messages from keywords

    very simple filter implementation

    >>> f = NaiveFilter()
    >>> f.parse("filepath")
    >>> f.filter("hello sexy baby")
    hello **** baby
    '''

    def __init__(self):
        self.keywords = set([])

    def parse(self, path):
        for keyword in open(path):
            self.keywords.add(keyword.strip().decode('utf-8').lower())

    def filter(self, message, repl="*"):
        message = str(message).lower()
        for kw in self.keywords:
            message = message.replace(kw, repl)
        return message

使用BSF(寬度優(yōu)先搜索)進(jìn)行實(shí)現(xiàn)

對(duì)于搜索查找進(jìn)行了優(yōu)化,對(duì)于英語單詞,直接進(jìn)行了按詞索引字典查找。對(duì)于其他語言模式,我們采用逐字符查找匹配的一種模式。

BFS:寬度優(yōu)先搜索方式

class BSFilter:

    '''Filter Messages from keywords

    Use Back Sorted Mapping to reduce replacement times

    >>> f = BSFilter()
    >>> f.add("sexy")
    >>> f.filter("hello sexy baby")
    hello **** baby
    '''

    def __init__(self):
        self.keywords = []
        self.kwsets = set([])
        self.bsdict = defaultdict(set)
        self.pat_en = re.compile(r'^[0-9a-zA-Z]+$')  # english phrase or not

    def add(self, keyword):
        if not isinstance(keyword, str):
            keyword = keyword.decode('utf-8')
        keyword = keyword.lower()
        if keyword not in self.kwsets:
            self.keywords.append(keyword)
            self.kwsets.add(keyword)
            index = len(self.keywords) - 1
            for word in keyword.split():
                if self.pat_en.search(word):
                    self.bsdict[word].add(index)
                else:
                    for char in word:
                        self.bsdict[char].add(index)

    def parse(self, path):
        with open(path, "r") as f:
            for keyword in f:
                self.add(keyword.strip())

    def filter(self, message, repl="*"):
        if not isinstance(message, str):
            message = message.decode('utf-8')
        message = message.lower()
        for word in message.split():
            if self.pat_en.search(word):
                for index in self.bsdict[word]:
                    message = message.replace(self.keywords[index], repl)
            else:
                for char in word:
                    for index in self.bsdict[char]:
                        message = message.replace(self.keywords[index], repl)
        return message

使用DFA(Deterministic Finite Automaton)進(jìn)行實(shí)現(xiàn)

DFA即Deterministic Finite Automaton,也就是確定有窮自動(dòng)機(jī)。
使用了嵌套的字典來實(shí)現(xiàn)。

class DFAFilter():

    '''Filter Messages from keywords

    Use DFA to keep algorithm perform constantly

    >>> f = DFAFilter()
    >>> f.add("sexy")
    >>> f.filter("hello sexy baby")
    hello **** baby
    '''

    def __init__(self):
        self.keyword_chains = {}
        self.delimit = '\x00'

    def add(self, keyword):
        if not isinstance(keyword, str):
            keyword = keyword.decode('utf-8')
        keyword = keyword.lower()
        chars = keyword.strip()
        if not chars:
            return
        level = self.keyword_chains
        for i in range(len(chars)):
            if chars[i] in level:
                level = level[chars[i]]
            else:
                if not isinstance(level, dict):
                    break
                for j in range(i, len(chars)):
                    level[chars[j]] = {}
                    last_level, last_char = level, chars[j]
                    level = level[chars[j]]
                last_level[last_char] = {self.delimit: 0}
                break
        if i == len(chars) - 1:
            level[self.delimit] = 0

    def parse(self, path):
        with open(path,encoding='UTF-8') as f:
            for keyword in f:
                self.add(keyword.strip())

    def filter(self, message, repl="*"):
        if not isinstance(message, str):
            message = message.decode('utf-8')
        message = message.lower()
        ret = []
        start = 0
        while start < len(message):
            level = self.keyword_chains
            step_ins = 0
            for char in message[start:]:
                if char in level:
                    step_ins += 1
                    if self.delimit not in level[char]:
                        level = level[char]
                    else:
                        ret.append(repl * step_ins)
                        start += step_ins - 1
                        break
                else:
                    ret.append(message[start])
                    break
            else:
                ret.append(message[start])
            start += 1

        return ''.join(ret)

到此這篇關(guān)于Python 敏感詞過濾的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python 敏感詞過濾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django2.1集成xadmin管理后臺(tái)所遇到的錯(cuò)誤集錦(填坑)

    Django2.1集成xadmin管理后臺(tái)所遇到的錯(cuò)誤集錦(填坑)

    這篇文章主要介紹了Django2.1集成xadmin管理后臺(tái)所遇到的錯(cuò)誤集錦(填坑),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 使用Python可設(shè)置抽獎(jiǎng)?wù)邫?quán)重的抽獎(jiǎng)腳本代碼

    使用Python可設(shè)置抽獎(jiǎng)?wù)邫?quán)重的抽獎(jiǎng)腳本代碼

    這篇文章主要介紹了Python可設(shè)置抽獎(jiǎng)?wù)邫?quán)重的抽獎(jiǎng)腳本,抽獎(jiǎng)系統(tǒng)包含可給不同抽獎(jiǎng)?wù)咴O(shè)置不同的權(quán)重,先從價(jià)值高的獎(jiǎng)品開始抽,已經(jīng)中獎(jiǎng)的人,不再參與后續(xù)的抽獎(jiǎng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Python中SyntaxError: invalid syntax報(bào)錯(cuò)解決

    Python中SyntaxError: invalid syntax報(bào)錯(cuò)解決

    在編寫Python代碼時(shí),常見的SyntaxError錯(cuò)誤通常由括號(hào)不匹配、關(guān)鍵字拼寫錯(cuò)誤或不正確的縮進(jìn)引起,本文詳細(xì)介紹了錯(cuò)誤原因及多種解決方案,包括檢查括號(hào)、關(guān)鍵字,以及使用IDE的語法檢查功能等,感興趣的可以了解一下
    2024-09-09
  • Python使用pypandoc將markdown文件和LaTex公式轉(zhuǎn)為word

    Python使用pypandoc將markdown文件和LaTex公式轉(zhuǎn)為word

    pypandoc 是一個(gè)用于 pandoc 的輕量級(jí) Python 包裝器,支持多種格式的文檔轉(zhuǎn)換,下面我們來看看如何使用pypandoc將markdown文件和LaTex公式轉(zhuǎn)為word吧
    2025-04-04
  • python Selenium爬取內(nèi)容并存儲(chǔ)至MySQL數(shù)據(jù)庫的實(shí)現(xiàn)代碼

    python Selenium爬取內(nèi)容并存儲(chǔ)至MySQL數(shù)據(jù)庫的實(shí)現(xiàn)代碼

    這篇文章主要介紹了python Selenium爬取內(nèi)容并存儲(chǔ)至MySQL數(shù)據(jù)庫的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-03-03
  • 將tensorflow的ckpt模型存儲(chǔ)為npy的實(shí)例

    將tensorflow的ckpt模型存儲(chǔ)為npy的實(shí)例

    今天小編就為大家分享一篇將tensorflow的ckpt模型存儲(chǔ)為npy的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python爬取視頻(其實(shí)是一篇福利)過程解析

    Python爬取視頻(其實(shí)是一篇福利)過程解析

    這篇文章主要介紹了Python爬取視頻(其實(shí)是一篇福利)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python中的各種裝飾器解析

    Python中的各種裝飾器解析

    這篇文章主要介紹了Python中的各種裝飾器解析,Python裝飾器可以在不改變函數(shù)原實(shí)現(xiàn)方式的前提下,為函數(shù)添加額外的功能,需要的朋友可以參考下
    2023-11-11
  • python如何利用turtle繪制正方形

    python如何利用turtle繪制正方形

    這篇文章主要介紹了python如何利用turtle繪制正方形,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python寫完程序怎么運(yùn)行的兩種方式

    python寫完程序怎么運(yùn)行的兩種方式

    這篇文章主要介紹了Python的兩種運(yùn)行方式,分別是命令行和交互式命令行,并詳細(xì)講解了如何在命令行和交互式命令行中運(yùn)行Python代碼,需要的朋友可以參考下
    2025-03-03

最新評(píng)論

赞皇县| 宣化县| 革吉县| 读书| 沈丘县| 永登县| 威海市| 清远市| 乌苏市| 左贡县| 常德市| 漠河县| 三江| 荥经县| 于都县| 文山县| 丰顺县| 龙泉市| 通州市| 马鞍山市| 武穴市| 石狮市| 潮州市| 合江县| 拉孜县| 福州市| 五河县| 珠海市| 静宁县| 响水县| 上栗县| 临沭县| 杂多县| 瑞金市| 全椒县| 正定县| 云龙县| 门源| 桑日县| 石楼县| 桂林市|