このディレクトリの索引

mecab(文,_文,LL) :-
        tmpnam(TMPNAM),
        tell(TMPNAM),
        writef('%t\n',[_文]),
        told,
        mecab(TMPNAM,LL).

mecab(_ファイル,LL) :-
        atomic_list_concat(['cat ',_ファイル,' | mecab'],S),
        sh(S,LL_1),
        findall([S1,S3],(
                    member([U|_],LL_1),
                    sub_atom(U,_,_,_,S1,'\t',S3,_,_,_)),
                LL).

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).

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).

mecab(_ファイル,LL) :-
        atomic_list_concat(['cat ',_ファイル,' | mecab'],S),
        sh(S,LL_1),
        findall([S1,S3],(
                    member([U|_],LL_1),
                    sub_atom(U,S1,'\t',S3)),
                LL).

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

split(_文字列,_区切り文字ならび,L) :-
        atom_chars(_文字列,_文字ならび),
        split_list(_文字ならび,_区切り文字ならび,L).

split_list([],_,[]).
split_list(L1,_区切り文字ならび,[_文字列|R]) :-
        split_list_2(_区切り文字ならび,L1,_文字列),
        split_list(L3,_区切り文字ならび,R),!.
split_list(L1,_区切り文字ならび,[_文字列]) :-
        atom_chars(_文字列,L1).

split_list_2(_区切り文字ならび,L,_文字列,L3) :-
        append(L1,L2,L3,L),
        member(_区切り文字,_区切り文字ならび),
        split_list_3(_区切り文字,L1,L2,L3),
        atom_chars(_文字列,L1),!.

split_list_3(_区切り文字,L1,L2,L3) :-
        all(L2,_区切り文字),
        \+(append(_,[_区切り文字],L1)),
        \+(L3 = [_区切り文字|_]),!.

tmpnam(TMPNAM) :-
        'TMPNAM'(TMPNAM),
        \+(exist_file(TMPNAM)),!.
tmpnam(TMPNAM) :-
        tmpnam(TMPNAM).

'TMPNAM'(TMPNAM) :-
        '英小文字大文字数字からなる6要素の文字ならび'(_6要素の文字ならび),
        atomic_list_concat(['/tmp/file'|_6要素の文字ならび],TMPNAM).

'英小文字大文字数字からなる6要素の文字ならび'(_6要素の文字ならび) :-
        findall(_任意の文字,(
                    between(1,6,_),
                    '英小文字大文字数字から任意の文字'(_任意の文字)),
                _6要素の文字ならび).

'英小文字大文字数字から任意の文字'(_任意の文字) :-
        _文字コード is random(75) + 48,
        '文字コード48-122の範囲で記号のコードではない'(_文字コード),
        char_code(_任意の文字,_文字コード),!.
'英小文字大文字数字から任意の文字'(_任意の文字) :-
        '英小文字大文字数字から任意の文字'(_任意の文字).

'文字コード48-122の範囲で記号のコードではない'(_文字コード) :-
        '文字コード範囲58-64ではない'(_文字コード),
        '文字コード範囲91-96ではない'(_文字コード).

'文字コード範囲58-64ではない'(_文字コード) :-
        \+((_文字コード>=58,_文字コード=<64)).

'文字コード範囲91-96ではない'(_文字コード) :-
        \+((_文字コード>=91,_文字コード=<96)).

sub_atom(A,H,X,T) :-
        atom(A),
        sub_atom(A,S,L,R,X),
        sub_atom(A,0,S,_,H),
        sub_atom(A,_,R,0,T).