Python을 이용하여 주요 채팅 시스템에서 욕설 차단 원리를 작성
화면에 * 표시가 조화롭게 공세를 채우는 영상이 갑자기 생각나서 매우 흥미로웠습니다. 그러다가 파이썬으로 작성해 보고 싶었는데 결과가 정말 효과적이네요. 우선 욕설을 저장해 두는 창고가 있어야 나중에 감지할 수 있다는 생각이 듭니다. 목록은 사용하기 쉽고 유연하게 확장할 수 있기 때문에 여기에 있습니다. 코어에서 욕설을 차단하는 방법을 생각할 때 플레이어가 입력하는 탄막의 데이터 유형이 무엇인지 기억해야 합니다. 먼저, 문자열이 뒤따릅니다. 특별한 요구 사항이 없으면 그냥 사용하세요. 항상 이러한 데이터 구조가 있으며, 문자열 대체를 사용하면 * 숫자가 훨씬 쉽습니다. 오늘 우리가 이야기하는 것은 완전한 구조 집합입니다. 모두가 좀 더 명확하게 배울 수 있도록 코드를 쪼개서 조립해서 모두가 더 깊이 이해할 수 있도록 하겠습니다. 우선 욕설을 대체할 핵심 기능을 살펴보겠습니다. 코드는 다음과 같습니다.
#!/usr/bin/env python # -*- coding:utf-8 -*- import datetime time = datetime.datetime.now() speak = '你个狗日的,fuckR你妈哟,操你个仙人板板,个老麻批' dirty = ['fuck','狗日的','犊子','麻批','仙人板板','R你妈','操你','草你'] for i in dirty: speak = speak.replace(i,'*') print speak+" | "+str(time)
욕설을 차단하는 것이 간단하고 쉽나요? 이것은 시간 모듈 datetime을 가져옵니다. 로그를 작성하고 나중에 저장하는 데 사용됩니다. 물론 많은 게임 대화도 현재 시간을 표시한 다음 플레이어가 출력하려는 더러운 단어를 말합니다(이제는 데모이므로 실제 입력을 위해 입력으로 변경됩니다). 더티 이는 정의된 저주 단어 라이브러리입니다(물론 각 지역이 다르고 끝내기에는 너무 많기 때문에 너무 많이 쓰지 않았습니다). 그 뒤에 검색할 for 루프가 이어집니다. 라이브러리에 욕설이 포함되어 있다면 이를 교체로 대체할 것입니다. 최종 인쇄는 공개 화면에 표시되는 모든 자막이 *... 물론 누가 무슨 말을 했는지 추적하는 방법도 생각해야 합니다. 이런 식으로 클래스를 연결하는 이유에 대한 질문이 분명히 있을 것입니다. 클래스를 사용하면 우선 클래스는 사물의 클래스에 대한 설명을 요약한 것입니다. 원형 테이블, 회의 테이블, 사무실 책상 등) 예를 들어 플레이어 그룹은 모두 고유한 게임 이름을 갖고 있으며 모두 채팅 기능(액션이라고도 함)을 갖고 있으므로 둘 다 가능합니다. 분류와 차별화가 가능합니다. 코드는 다음과 같습니다.
class Player(object): def __init__(self,name): self.name = name def talk(self): self.string = 'whatever fuck no joke' self.log() self.string = self.string.replace('fuck','雅蠛蝶') print "公屏显示:%s--%s"%(self.name,self.string) def log(self): print "日志记录为:%s--%s"%(self.name,self.string) t1 = Player('white') t1.talk()
다음은 클래스 및 워크플로 효과 사용에 대한 포괄적인 소개입니다. 여기서는 먼저 Player와 같은 플레이어 클래스를 만들고 초기화합니다. 채팅 기능과 로깅 기능이 있는 이름을 초기화합니다. 채팅 작업 프로세스에 대해 이야기해 보겠습니다. 각 플레이어는 게임에 등록하고 로그인한 후 게임 이름을 갖게 됩니다. (QQ에 로그인한 후와 동일하게 이해하시면 됩니다.) 여기서 self.name=name은 개인 이름(화면 이름)을 가져온 다음 채팅 창을 열어 대화를 입력하고 self.string을 입력한 채팅 정보, self.log를 기록하는 것이 핵심입니다. 먼저 채팅 로그에 원래 단어를 기록하여 확인할 수 있습니다. 기록인 self.string.replace로 이동하여 말한 욕설을 바꾸면 대체된 단어만 화면에 표시됩니다. 인쇄된 것은 원래 Ya Zhidie가 프로그래밍한 것입니다... 물론 이 작업 흐름이 매우 명확한가요? 물론, 수업 방법을 이해하지 못한다면 이 아이디어가 있는 한 여기서 매우 혼란스러울 것입니다. 수업을 배우면 매우 쉬울 것입니다. 물론 이대로 끝나지는 않을 것이다. 드디어 기본 완성코드가 다음과 같이 공개된다.
import datetime time = str(datetime.datetime.now())[:-7] dirty = ['fuck','狗日的','犊子','麻批','仙人板板','R你妈','操你','草你'] class Player(object): def __init__(self,name): self.name = name def talk(self): self.string = raw_input("input-write:") # self.string = '你个狗日的,R你妈哟,操你个仙人板板,个老麻批' self.log() for i in dirty: self.string = self.string.replace(i,'雅蠛蝶') print "{} {}-speak:{}".format(time,self.name,self.string,) def log(self): with open('zanghua.txt','a') as f: f.write("{} {}-speak:{}\n".format(time,self.name,self.string)) t1 = Player('white') t2 = Player('black') t3 = Player('green') while True: n = raw_input('change Player:') if n == '1': t1.talk() elif n == '2': t2.talk() elif n == '3': t3.talk() elif n == 'q': print 'Bye' break else: print "尼玛在逗我?"
테스트 결과는 다음과 같다.
빈 텍스트로 zanghua.txt라는 새 파일을 만들 수 있습니다. 이는 로그 저장의 동작 효과를 보여주기 위해서만 사용됩니다. 위 인쇄에서는 Player 변경이 간단한 전환이라고 나와 있습니다. 다양한 사용자 입력을 보여줍니다. 로그인 후 사용자를 거의 전환하지 않고 현재 계정과 채팅만 합니다. 여기 코드는 줄여서 f라고 하는 open(파일 이름, open 모드)을 사용하여 파일 처리 방법을 추가합니다. 그런 다음 write를 씁니다(끝에 n개의 개행 문자를 추가해야 합니다. 그렇지 않으면 첫 번째 줄 전체를 읽기가 어렵습니다.) datetime[:7] 슬라이싱에 관해서는 위에 인쇄할 때 시간 이후의 나머지 부분을 무시하는 것이 더 간결합니다. . 물론 기본 프로세스는 이렇습니다. 특정 횟수의 욕설 이후 발언을 금지하거나, 발언을 몇 분으로 제한하거나, 정기적으로 로그를 삭제할 수 있는 등 다양한 확장이 있을 수 있습니다. 코드의 양이 좀 많아서 여기서는 보여드리지 않겠습니다. 제가 설명하고 싶은 마지막 사진은 다음과 같습니다. 많은 분들이 오해하고 계실 수도 있습니다. .