このディレクトリの索引

ある文字数以上の単語をすべて抽出する(_ある文字数以上の単語ならび) :-
        形態素解析(_文字列,_形態素ならび),
        findall(_ある文字数以上の単語,(
                    member(_ある文字数以上の単語,_形態素ならび),
                    atom_length(_ある文字数以上の単語,_文字数),
                    _文字数 >= _ある文字数),
                _ある文字数以上の単語ならび).

形態素解析(S,L) :-
        tmpnam(F),
        tell(F),
        writef('%t',[S]),
        told,
        形態素解析サーバによる形態素解析(ファイル,F,L) .

形態素解析サーバによる形態素解析(_ファイル名,_形態素ならび) :-
        形態素解析サーバー(_形態素解析サーバー),
        atomic_list_concat(['cat ',_ファイル名,' | ',_形態素解析サーバー],S),
        sh(S,L1),
        形態素解析(L1,L2),
        形態素解析_3(L2,L).

形態素解析_1([],[]) :- !.
形態素解析_1([['EOS'|_]|_],[]) :- !.
形態素解析_1([[A|_],[@,B|_]|R],[R1_1|R3]) :-
        形態素解析_2(R,R1,R2),
        形態素解析_2_重複削除([A,B|R1],[],R1_1),
        形態素解析_1(R2,R3),!.
形態素解析_1([[A|_]|R],[B|R2]) :-
        mecabサーバーによる形態素解析(A,B,R,R2),!.
形態素解析_1([[A|_]|R],[A|R2]) :-
        jumanサーバーによる形態素解析(A,B,R,R2).

mecabサーバーによる形態素解析(A,B,R,R2) :-
        形態素解析サーバー(mecab),
        split(A,['\t'],AL),
        AL = [B|_],
        形態素解析_1(R,R2),!.

jumanサーバーによる形態素解析(A,B,R,R2) :-
        形態素解析サーバー(juman),
        形態素解析_1(R,R2),!.

形態素解析_2([],[],[]) :- !.
形態素解析_2([[A|R1]|R],[],[[A|R1]|R]) :-
        \+(A = (@)),!.
形態素解析_2([[@,A|_]|R],[A|R2],R3) :-
        形態素解析_2(R,R2,R3),!.

形態素解析_3([],[]).
形態素解析_3([A|R],[A|R2]) :-
        \+(list(A)),
        '形態素解析_3(R,R2) .
形態素解析_3([A|R],[B|R2]) :-
        list(A),
        member(B,A),
        形態素解析_3(R,R2) .

形態素解析_2_重複削除([],L1,L) :-
        reverse(L1,L),!.
形態素解析_2_重複削除([A|R],Y,X) :-
        member(A,Y),
        形態素解析_2_重複削除(R,Y,X),!.
形態素解析_2_重複削除([A|R],Y,X) :-
        \+(member(A,Y)),
        形態素解析_2_重複削除(R,[A|Y],X) .

sh(Command,X) :-
        shs(Command,Y),
        findall(U,(
                    member(V,Y),
                    split(V,[' ',','],U)),
                X).

shs(Command,X) :-
        popen(Command,L),
        shs_3(L,X).

shs_3(L,[S|R]) :-
        append(L0,['\n'|R1],L),
        atom_chars(S,L0),
        shs_3(R1,R).
shs_3([],[]) :- !.
shs_3(L,[S]) :-
        atom_chars(S,L).

popen(Command,Chars) :-
        open(pipe(Command),read,Instream),
        get_char(Instream,Char),
        popen(Instream,Char,Chars),
        close(Instream),!.

popen(Instream,end_of_file,[]) :- !.
popen(Instream,Char,[Char|R]) :-
        get_char(Instream,Char2),
        popen(Instream,Char2,R).