PythonShowMeTheCode(0011-12): 檢測(cè)敏感詞

1. 題目

第 0011 題: 敏感詞文本文件 filtered_words.txt,里面的內(nèi)容為以下內(nèi)容,當(dāng)用戶輸入敏感詞語(yǔ)時(shí),則打印出 Freedom,否則打印出 Human Rights。

第 0012 題: 敏感詞文本文件 filtered_words.txt,里面的內(nèi)容和0011題一樣,當(dāng)用戶輸入敏感詞語(yǔ),則用 星號(hào) * 替換,例如當(dāng)用戶輸入「北京是個(gè)好城市」,則變成「**是個(gè)好城市」。

北京
程序員
公務(wù)員
領(lǐng)導(dǎo)
牛比
牛逼
你娘
你媽
love
sex
jiangge

2. 思路

  • 首先,從敏感詞文件中讀取到敏感詞匯,放入容器中
  • 然后,獲取用戶輸入,判斷輸入是否包含敏感詞匯, 并輸出相對(duì)應(yīng)的結(jié)果(0012題則需要對(duì)字符串進(jìn)行替換)。

3. 實(shí)現(xiàn)

# -*- coding: utf-8 -*-


def get_filters(path):
    if path is None:
        return

    filters = []
    with open(path, encoding="utf-8") as f:
        for line in f.readlines():
            if "\n" in line:
                filters.append(line[:-1])
            else:
                filters.append(line)
    return filters


def main_0011():
    filters = get_filters("1.txt")
    while 1:
        tmp = input("plz input: ")
        if tmp == "0":
            print("Exit")
            break
        else:
            if tmp in filters:
                print("Freedom")
            else: 
               print("Human Rights")


if __name__ == "__main__":
    main_0011()
def main_0012():
    filters = get_filters("1.txt")
    while 1:
        tmp = input("plz input:")
        if tmp == "0":
            print("Exit")
            break
        for filter_word in filters: 
           new_str = "" 
           if filter_word in tmp:
                if len(re.findall(u"[\u4e00-\u9fa5]+", filter_word)) > 0:
                    len_new_str = len(filter_word)
                else:
                    len_new_str = 1

                for i in range(len_new_str): 
                   new_str += "*"
                tmp = str(tmp).replace(filter_word, new_str)

        print(tmp)

0012題要求將北京替換為**兩個(gè)星號(hào), 所以需要先計(jì)算敏感詞匯的字符數(shù), len()函數(shù)即可達(dá)到目的。當(dāng)敏感詞匯為一個(gè)英文單詞時(shí),只替換成一個(gè)星號(hào)即可。

本例中采用正則來(lái)匹配敏感詞中是否含有中文。

4. 字符串前面加r或者u的意義

  • 字符串前面加r是為了告訴編譯器這個(gè)string是個(gè)raw string,不要轉(zhuǎn)義 '' ,一般用于正則表達(dá)式, re模塊中。
  • 字符串前面加u是為了表示該字符串為Unicode編碼的。
  • 字符串前面加b是為了令字符串以字節(jié)形式表示。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容