python 중국어 단어 튜 토리 얼 전에 최대 정방 향 일치 알고리즘 에 대한 상세 한 설명

머리말
모두 가 알다 시 피 영어 의 단 어 는 단어 간 에 빈 칸 으로 구분 되 기 때문에 단 어 를 나 누 는 것 이 상대 적 으로 쉬 워 야 한다.그러나 중국 어 는 다르다.중국어 에서 한 문장의 구분 은 바로 글자 단위 이다.이른바 정방 향 최대 일치 와 역방향 최대 일치 가 바로 단어 가 일치 하 는 방법 이다.여 기 는 사전 일치 로 설명 한다.
최대 일치 알고리즘 은 자연 언어 처리 중의 중국어 일치 알고리즘 중 가장 기초적인 알고리즘 으로 정방 향 과 역방향 으로 나 뉘 는데 원 리 는 모두 같다.
최대 일치 알고리즘 을 찾 고 있 습 니 다.
먼저,우 리 는 한 단어의 최대 길 이 를 규정 할 수 있 습 니 다.스 캔 할 때마다 현재 시 작 된 이 길이 의 단 어 를 찾 아 사전 의 단어 와 일치 하도록 할 수 있 습 니 다.찾 지 못 하면 길 이 를 줄 여 계속 찾 습 니 다.찾 거나 단어 가 될 때 까지 계속 찾 습 니 다.
다음은 더 이상 할 말 이 없 으 니 상세 한 소 개 를 해 봅 시다.
실례:
S1="계산 언어학 과정 은 3 교시",최대 단어 인 MaxLen=5,S2="설정
사전 에는 세 가지 단어 가 포함 되 어 있다.[계산 언어학],[과정],[수업 시간]
    (1)S2="";S1 이 비어 있 지 않 습 니 다.S1 왼쪽 에서 후보 문자열 W='계산 언어학'을 꺼 냅 니 다.
    (2)어 표를 살 펴 보면'계산 언어학'은 어 표 에서 W 를 S2 에 넣 고 S2='계산 언어학/'은 W 를 S1 에서 빼 는데 이때 S1='수업 은 세 시간'이다.
    (3)S1 이 비어 있 지 않 아 S1 왼쪽 에서 후보 문자열 W 를 꺼낸다="수업 은 세 개"
    (4)어 표를 찾 아 보면 W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 없 애고 W='과정 은 3'을 얻 을 수 있다.
    (5)어 표를 찾 아 보면 W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 없 애고 W='과정 은'을 얻 을 수 있다.
    (6)어 표를 찾 아 라.W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 없 애고 W='과정'을 얻는다.
    (7)어 표를 찾 아 보면 W 는 어 표 에서 W 를 S2 에 넣 고 S2='계산 언어학/과정/'이 며 W 를 S1 에서 빼 는데 이때 S1='세 시간 입 니 다'.
    (8)S1 이 비어 있 지 않 아 S1 왼쪽 에서 후보 문자열 W="세 시간 입 니 다."
    (9)어 표를 찾 아 보면 W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 없 애고 W="세 과목 입 니 다"를 얻 을 수 있 습 니 다.
    (10)어 표를 찾 아 보 세 요.W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 제거 하고 W="세 개 입 니 다"를 얻 을 수 있 습 니 다.
    (11)어 표를 찾 아 라.W 는 어 표 에 없다.W 의 맨 오른쪽 에 있 는 한 글 자 를 빼 고 W="3 이다"를 얻는다.
    (12)어 표를 찾 아 보면 W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 빼 고 W='예'를 얻는다.이때 W 는 한 글자 로 W 를 S2 에 넣 고 S2='계산 언어학/과정/예/'를 계산 하고 W 를 S1 에서 제거한다.이때 S1='3 교시'.
    (13)S1 이 비어 있 지 않 고 S1 왼쪽 에서 후보 문자열 W='3 교시'를 꺼낸다.
    (14)어 표를 찾 아 보면 W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 없 애고 W='세 과목'을 얻 을 수 있다.
    (15)어 표를 찾 아 라.W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 없 애고 W='세 개'를 얻는다.
    (16)어 표를 찾 아 보면 W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 빼 고 W='3'을 얻는다.이때 W 는 단자 이 고 W 를 S2 에 넣는다.S2='계산 언어학/과정/예/3/'이 고 W 를 S1 에서 제거한다.이때 S1='개 교시'.
    (17)S1 이 비어 있 지 않 습 니 다.S1 왼쪽 에서 후보 문자열 W='개 시간'을 꺼 냅 니 다.
    (18)어 표를 찾 아 라.W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 없 애고 W='개 과'를 얻는다.
    (19)어 표를 찾 아 보면 W 는 어 표 에 없 으 며 W 의 맨 오른쪽 에 있 는 한 글 자 를 빼 고 W='개'를 얻는다.이때 W 는 단자 이 고 W 를 S2 에 넣 으 면 S2='계산 언어학/과정/예/3/개/'이 며 W 를 S1 에서 빼 면 이때 S1='수업 시간'이다.
    (20)S1 이 비어 있 지 않 고 S1 왼쪽 에서 후보 문자열 W='수업 시간'을 꺼 냅 니 다.
    (21)어 표를 찾 아 보면 W 는 어 표 에서 W 를 S2 에 넣 고 S2="계산 언어학/과정/예/3/개/교시/"이 며 W 를 S1 에서 빼 고 이때 S1="
    (22)S1 이 비어 있 고 S2 를 분사 결과 로 출력 하 며 분사 과정 이 종료 된다.
왜 python 이라는 언어 를 선 택 했 을 까?제 주변 사람들 이 적 게 써 서 그런 지 돌파 해 보고 싶 습 니 다.하지만 저도 꺼 리 지 않 습 니 다.제 C/C+,자바 등 고급 언어 도 많이 사용 하지 않 습 니 다.프로 그래 밍 언어 라 는 것 은 기본적으로 하나 만 익 히 면 다른 것 은 모두 배우 기 쉽 지만 저 는 python 에서 재 미 를 보 았 고 아예 이 언어 를 사 용 했 습 니 다.
중국어 단어 알고리즘 Python 구현:
스 크 립 트 는 두 개의 인 자 를 받 아들 입 니 다.하 나 는 파일 을 입력 하 는 경로 이 고 다른 하 나 는 사전 의 경로 입 니 다.
그것 의 운행 방법 은 다음 과 같다.

python max-match.py <data> <dict>

#!/usr/bin/env python
import cPickle as pickle
import sys

#        5
window_size=5

def max_match_segment(line, dic):
 # write your code here
 chars = line.decode("utf8")
 words = []
 idx = 0
 #         chars   
 while idx < len(chars):
  matched = False
  for i in xrange(window_size, 0, -1):
   cand=chars[idx:idx+i].encode("utf8")
   if cand in dic:
    words.append(cand)
    matched = True
    break
  #   for        
  if not matched:
   i = 1
   words.append(chars[idx].encode("utf8"))
  idx += i

 return words

if __name__=="__main__":

 try:
  fpi=open(sys.argv[1], "r")
 except:
  print >> sys.stderr, "failed to open file"
  sys.exit(1)

 try:
  dic = pickle.load(open(sys.argv[2], "r"))
 except:
  print >> sys.stderr, "failed to load dict %s" % sys.argv[2]
  sys.exit(1)
 try:
  fpo = open("out.txt","w")
 except:
  print >> sys.stderr, "failed to load out.txt"
  sys.exit(1)
 for line in fpi:
  fpo.write("\t".join( max_match_segment(line.strip(), dic) ))
물론 이것 은 가장 기본 적 인 것 일 뿐 고급 최적화 도 많이 할 수 있다.예 를 들 어 트 리 버 전 으로 바 꾸 고 최대 단어의 길 이 를 조절 하 는 등 이다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기