Erlangで人工知能に挑戦してみるよ日記

2008-07-13

[][]パーサつくるよ パーサつくるよ - Erlangで人工知能に挑戦してみるよ日記 を含むブックマーク はてなブックマーク - パーサつくるよ - Erlangで人工知能に挑戦してみるよ日記

-module(parser).
-export(parse/2]).
-export(find_prefix_of_tail/2]).
-export(original_flatten/1]).
%% find for list of prefix, return list or tail.
find_prefix_of_tail(_Prefix, List) -> [];
find_prefix_of_tail(Prefix, List) ->
  case lists:prefix(Prefix, List) of
    true ->
      [[hd(List)|find_prefix_of_tail(Prefix, tl(List))]];
    false ->
      lists:append([hd(List), find_prefix_of_tail(Prefix, tl(List)))
  end.

%% shallow flatten.
original_flatten(List) ->
  Split = fun(L) ->
    lists:splitwith(fun(X) -> is_integer(X) end, L) end,
  {First, [Second]} = Split(List),
  case is_list(lists:last(Second) of
    true ->
      lists:append([First], original_flatten(Second));
    false ->
      [First, Second]
  end.

%% parse from target(list) for list. return on target_words(list).
parse(Target, List) ->
  original_flatten(find_prefix_of_tail(Target, List)).

やりたいこと。

  • 並列化、分散化された人工知能がつくりたい
  • 要件、評価つきで自己学習できる
  • 要件、N-gram方式で文章解析する

今回つくったパーツ。

  • 文章解析のパーサ。

こんなのをつくったつもり。

parser:parse("は", "今日は、僕は田中一郎です。").

#=> ["今日", "は、僕", "は田中一郎です。"]*1

*1:実際には文字列ではなく、文字列を表現するバイトのリストで返る