Prolog에서 HMM tagger를 구현하려고 시도하고 있는데, 매우 간단한 튜토리얼과 함께 here을 찾았습니다.Prolog HMM Tagger, 구문 오류, 의문의 여지가있는 프로그램 구조
프롤로그에 대한 완전한 초보자로서 나는 거기에 설명 된 결과를 얻는데 어려움을 겪고 있습니다.
는 지금까지 내가 즉, 파일에 outprob(a,det,0.300).
및 transprob(start,det,0.30).
의 모든 데이터를 서면으로 작성했습니다, 또한 내가 즉, 더 아래 같은 파일의 HMM 기능,
most_probable_sequence(Words,Ss) :-
findall(PS,sequence(Words,1-[start],PS)PSs),
max_key(PSs,P-Ss1),
reverse(Ss1,[start|Ss]).
sequence([],PSs,PSs).
sequence([Word|Words],P1-[S1|Ss],PSs) :-
outprob(Word,S2,Po),
transprob(S1,S2,Pt),
P2 is Po*Pt*P1,
sequence(Words,P2-[S2,S1|Ss],PSs).
I를 포함했다 ['filename.pl'].
명령을 사용 프롤로그에 파일을로드하고, I는 다음과 같은 에러 메시지 수신 :
:40:42: Syntax error: Operator expected
선 (40, 42)에 참조되어 있음? findall(PS,sequence(Words,1-[start],PS)PSs),
및 reverse(Ss1,[start|Ss]).
내 직관을 지정하는 행에 해당하는 것입니다
그렇다면, 나는 아마 다시 한 번 더 아래로 동일한 파일에, 내 자신에 findall()
및 reverse()
에 대한 함수를 정의 할 필요가 있다는 것입니다. 그 맞습니까?
, 내가 프롤로그 인터페이스에서 다음 명령을 입력하여 결과를 찾을 것이 사실이다 : 추신 포함
?- most_probable_sequence([he,can,can,a,can],Sequence).
을 표면 상 매우 유사하다 비터 비 술래를 보여줍니다 링크 HMM에 구현하려고하는 중이지만 HMM은 하위 페이지 'More ...'아래 페이지의 맨 아래에 있습니다. 링크에 따르면 "구현을 자세히 설명하는 짧은 문서가 있습니다 ".
오타의 결과이다
. 'findall (PS, sequence (Words, 1 - [시작], PS), PS), ' – CapelliC
그 점을 발견해 주셔서 감사합니다. Linux에서 실행되는 Prolog 용 IDE가 있습니까? 오류를 해결했습니다. 이제 경고 메시지 '39 : Singleton variables : [P]'가 나타납니다. 원래 질문에서 지정한 프롬프트와 함께 코드를 실행하려고 시도했지만 예외가 발생했습니다. 더 구체적으로 '예외 : (7) max_key ([5.10300000000002e-13- [aux, det ... 등] 무엇이 그것을 일으키는 지 알고 있습니까? 그리고 그것을 해결하기 위해 무엇을 할 수 있습니까? –