python 중국어 단어 튜 토리 얼 전에 최대 정방 향 일치 알고리즘 에 대한 상세 한 설명
4985 단어 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) ))
물론 이것 은 가장 기본 적 인 것 일 뿐 고급 최적화 도 많이 할 수 있다.예 를 들 어 트 리 버 전 으로 바 꾸 고 최대 단어의 길 이 를 조절 하 는 등 이다.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.