[Python 자연 언어 처리] 중국어 단어 기술 - 규칙 단어

중국어 분사 방법
본 고 는 서적 인 을 참고 하여 개인의 학습 노트 와 공 유 를 한다.
1. 규칙 단어
규칙 분 사 는 기계 적 인 단어 방법 으로 사전 을 유지 하고 절 분 된 문 구 를 사용 할 때 문장의 모든 문자열 과 어휘 표 의 단 어 를 하나씩 일치 시 키 면 절 분 됩 니 다. 찾 지 못 하면 절 분 됩 니 다.구체 적 으로 는 정방 향 최대 정합 법, 역방향 최대 정합 법 과 쌍방 향 최대 정합 법 을 포함한다
1.1 정방 향 최대 정합 법
1.1.1 알고리즘 설명
① 왼쪽 에서 오른쪽으로 절 분 된 중국어 문장의 m 문 자 를 일치 필드 로 하고 m 는 기계 사전 에서 가장 긴 단어의 문자 수 이다.② 기계 사전 을 찾 아 일치 시 킵 니 다.일치 하 는 데 성공 하면 이 일치 하 는 필드 를 단어 로 구분 합 니 다.일치 하지 않 으 면 이 일치 하 는 마지막 글 자 를 제거 하고 나머지 문자열 은 새로운 일치 필드 로 다시 일치 합 니 다.③ 모든 단 어 를 자 를 때 까지 상기 과정 을 반복 한다.
1.1.2 알고리즘 실현
#       
class MM(object):
    def __init__(self, dic_path):
        self.dictionary = set()
        self.maximum = 0
        with open(dic_path, 'r', encoding='utf8') as f:
            for line in f:
                line = line.strip()
                if not line:
                    continue
                self.dictionary.add(line)
                if len(line) > self.maximum:
                    self.maximum = len(line)

    def cut(self, text):
        result = []
        size = self.maximum
        text_len = len(text)
        while text_len > 0:
            word = text[0:size]
            while word not in self.dictionary:
                if len(word) == 1:
                  break
                word = word[0:len(word) - 1]
            result.append(word)
            text = text[len(word):]
            text_len = len(text)
        return result

if __name__ == '__main__':
    text = "       "
    tokenizer = MM('dic.utf8')
    print(tokenizer.cut(text))

주: dic. utf 8 파일 은 사용자 정의 사전 파일 입 니 다. 이 사전 은 어 휘 를 포함 합 니 다. 난 징 시 난 징 시장 장강 대교 인명 해방군 대교
1.2 역방향 최대 정합 법
1.2.1 알고리즘 설명
① 처 리 된 문서 의 끝 에서 부터 스 캔 ② 를 일치 시 킵 니 다. 맨 끝 i 문자 (i 는 사전 에서 가장 긴 단어) 를 일치 하 는 필드 로 사용 합 니 다. 일치 하 는 데 실패 하면 일치 하 는 필드 의 맨 앞 에 있 는 글 자 를 제거 하고 계속 일치 합 니 다.일치 하면 필드 를 저장 합 니 다. 사용 하 는 단어 사전 은 역순 사전 이 고 모든 단 어 는 역순 으로 저 장 됩 니 다.③ 실제 처리 할 때 문 서 를 역순 문서 로 역 배열 처리 할 수 있다.그리고 역순 사전 에 따라 역순 문 서 를 정방 향 최대 일치 법 으로 처리 하면 됩 니 다.
중국어 에서 편정 구조 가 비교적 많 기 때문에 뒤에서 앞으로 일치 하면 정확 도 를 적당 하 게 높 일 수 있다.따라서 역방향 최대 정합 법 은 정방 향 최대 정합 법보 다 오차 가 적다.통계 결과 에 따 르 면 단순 사용 정방 향 최대 일치 오류 율 은 1 / 169 이 고 단순 사용 역방향 최대 일치 오류 율 은 1 / 245 이다.
1.2.2 알고리즘 실현
#       
class IMM(object):
    def __init__(self, dic_path):
        self.dictionary = set()
        self.maximum = 0
        with open(dic_path, 'r', encoding='utf8') as f:
            for line in f:
                line = line.strip()
                if not line:
                    continue
                self.dictionary.add(line)
                if len(line) > self.maximum:
                    self.maximum = len(line)

    def cut(self, text):
        result = []
        index = len(text)
        while index > 0:
            word = None
            for size in range(self.maximum, 0, -1):
                if index - size < 0:
                    continue
                piece = text[(index - size):index]
                if piece in self.dictionary:
                    word = piece
                    result.append(word)
                    index -= size
                    break
            if word is None:
                index -= 1
        return result[::-1]

if __name__ == '__main__':
    text = "       "
    tokenizer = IMM('dic.utf8')
    print(tokenizer.cut(text))

1.3 양 방향 최대 정합 법
1.3.1 알고리즘 설명
정방 향 최대 일치 법 으로 얻 은 단어 결과 와 역방향 최대 일치 법 으로 얻 은 결 과 를 비교 하여 최대 일치 원칙 에 따라 단어 수 를 가장 적 게 자 른 것 을 결과 로 한다.
양 방향 일치 법 이 광범 위 하 게 응용 되 고 있다. SunM. S. 와 Bejamin K. T. (1995) 의 연구 에 따 르 면 중국어 에서 90.0% 정도 의 문장 은 정방 향 최대 일치 법 과 역방향 최대 일치 법 이 완전히 일치 하고 정확 하 며 약 9.0% 의 문장 두 가지 절 분 방법 만 얻 은 결 과 는 다 르 지만 그 중 하 나 는 정확 하 다 (잘못된 의미 검출 성공).1.0% 미 만 의 문장 만 있 습 니 다. 정방 향 최대 매 칭 법 과 역방향 최대 매 칭 법의 절 분 을 사용 하 는 것 은 겹 치 는 것 이 잘못 되 었 거나 정방 향 최대 매 칭 법 과 역방향 최대 매 칭 법 은 절 분 이 다 르 지만 둘 다 잘못 되 었 습 니 다 (잘못된 의미 검출 실패).
2. 통계 분사
통계 분사 의 상세 한 필기

좋은 웹페이지 즐겨찾기