敏感词过滤及字符串编码问题

本文介绍了一个简单的敏感词过滤实现方案,包括如何加载敏感词库、判断及替换敏感词,并讨论了字符串编码问题。


敏感词过滤代码:

# -*-coding:utf-8-*-
import sys

class senseWord():
    def __init__(self,fileName):
        """
                :type fileName: 敏感词文档
        """
        self.list = []
        print sys.stdin.encoding
        with open(fileName,'r') as f:
            for line in f.readlines():
                self.list.append(line.strip())

    def filter_0011(self,word):
        """
        判断输入词是否为敏感词
        :param word: 输入
        :return:
        """
        word = word.decode(sys.stdin.encoding).encode('utf-8')
        for item in self.list:
            item = item.decode('utf-8').encode('utf-8')
            if item== word:
                print 'Freedom'
                return item
        print 'Human Rights'
        return None

    def filter_0012(self,string):
        """
        若输入词是敏感词则替换
        :param string:
        :return:
        """
        res = self.filter_0011(string)
        if res != None:
            string = string.replace(res,"*")
        print string

if __name__ == "__main__":
    check = senseWord("filtered_words.txt")
    inputStr = raw_input("请输入: ").strip()
    check.filter_0012(inputStr)

Result:

UTF-8
请输入: 北京
*
Freedom


相关知识:

字符串编码问题

首先要搞清楚,字符串在Python内部的表示是unicode编码. 

因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 

decode的作用是将其他编码的字符串转换成unicode编码, 

如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。 

encode的作用是将unicode编码转换成其他编码的字符串, 

如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。 

即:

decode用法:str  -> decode('the_coding_of_str') -> unicode

encode用法:unicode -> encode('the_coding_you_want') -> str

判断字符串是什么格式的编码,可以用isinstance进行判断: 

isinstance(s, unicode) #用来判断是否为unicode 


终端的输入编码:sys.stdin.encoding 

终端的输出编码:sys.stdout.encoding



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值