Python 중국어 오류 정정 의 간단 한 실현

소개 하 다.
이 글 은 주로 Python 으로 간단 한 중국어 분사 의 동 음 자 오 류 를 고 쳤 다.현재 사례 에 서 는 한 글자 만 틀 릴 수 있 고 자신 이 관심 이 있 으 면 계속 최적화 할 수 있다.구체 적 인 절 차 는 다음 과 같다.
  • 먼저 파일 을 준비 합 니 다.그 안에 모든 줄 에 중국어 단 어 를 넣 습 니 다.제 가 있 는 파일 은 아래 코드 중의/Users/wys/Desktop/token.txt 입 니 다.당신들 은 자신 으로 바 꾸 고 코드 를 실행 할 수 있 습 니 다
  • 4.567917.접두사 트 리 류 를 구축 하여 삽입 기능 을 실현 하고 모든 표준 단 어 를 접두사 트 리 에 삽입 합 니 다.또한 하나의 검색 기능 을 실현 하여 단 어 를 검색 합 니 다4.567917.입력 한 잘못된 단어 중의 한 글 자 를 모두 10 개의 동 음 자 를 찾 아 한 글 자 를 10 개의 동 음 자로 교체 한 결과 최대 n*10 개의 단 어 를 얻 을 수 있 고 n 은 단어의 길 이 를 얻 을 수 있 습 니 다.어떤 음 은 10 개의 동 음 자가 없 을 수 있 기 때 문 입 니 다4.567917.이 단어 들 을 모두 접두사 트 리 에서 찾 습 니 다.찾 을 수 있 으 면 바로 잡 으 면 되 돌아 갑 니 다코드
    
    import re,pinyin
    from Pinyin2Hanzi import DefaultDagParams
    from Pinyin2Hanzi import dag
    
    class corrector():
        def __init__(self):
            self.re_compile = re.compile(r'[\u4e00-\u9fff]')
            self.DAG = DefaultDagParams()
    
        #         
        def getData(self):
            words = []
            with open("/Users/wys/Desktop/token.txt") as f:
                for line in f.readlines():
                    word = line.split(" ")[0]
                    if word and len(word) > 2:
                        res = self.re_compile.findall(word)
                        if len(res) == len(word): ##            
                            words.append(word)
            return words
    
        #             10      ,
        def pinyin_2_hanzi(self, pinyinList):
            result = []
            words = dag(self.DAG, pinyinList, path_num=10)
            for item in words:
                res = item.path  #     
                result.append(res[0])
            return result
    
        #              
        def getCandidates(self, phrase):
            chars = {}
            for c in phrase:
                chars[c] = self.pinyin_2_hanzi(pinyin.get(c, format='strip', delimiter=',').split(','))
            replaces = []
            for c in phrase:
                for x in chars[c]:
                    replaces.append(phrase.replace(c, x))
            return set(replaces)
    
        #            
        def getCorrection(self, words):
            result = []
            for word in words:
                for word in self.getCandidates(word):
                    if Tree.search(word):
                        result.append(word)
                        break
            return result
    
    class Node:
        def __init__(self):
            self.word = False
            self.child = {}
    
    
    class Trie(object):
        def __init__(self):
            self.root = Node()
    
        def insert(self, words):
            for word in words:
                cur = self.root
                for w in word:
                    if w not in cur.child:
                        cur.child[w] = Node()
                    cur = cur.child[w]
    
                cur.word = True
    
        def search(self, word):
            cur = self.root
            for w in word:
                if w not in cur.child:
                    return False
                cur = cur.child[w]
    
            if cur.word == False:
                return False
            return True
    
    if __name__ == '__main__':
        #       
        c = corrector()
        #     
        words = c.getData()
        #       
        Tree = Trie()
        #               
        Tree.insert(words)
        #   
        print(c.getCorrection(['    ','    ','    ']))
    결실
    인쇄 결과:
    ['전당 거리','전당 거리','전당 거리']
    모두 바로 잡 는 데 성 공 했 고 어느 정도 효과 가 있 으 며 그 후에 도 계속 최적화 할 것 임 을 알 수 있다.
    파 이 썬 의 중국어 오류 정정 에 관 한 간단 한 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 의 중국어 오류 정정 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기