盛大な独り言日記・自分用メモ2010.11.17~
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ものそい色々修正したのでこれだけじゃないかもしれませんが…
同じ文字が出てくる原因は、2gramファイル内に該当文字がある場合の処理関数内での、if文の条件がおかしかったのが原因でした。
point→num(開始文字の回数以下の乱数。0<=point<開始文字の回数)
no→初期値0,開始文字と2gramファイルの文字を比較して一致したときに1ずつ増える。
(開始文字に指定された文字がファイル内に存在すればn=n+1)
(最初の入力文字以外の連鎖は必ずファイル内に存在するはず?)
の2つ変数があって
forループ(2gramファイルの全体の行数分の回数){
①開始文字とファイル内の文字の行の頭を比較して、一致したらno+1をする
(最大で開始文字で始まる2gramの数までnが増える)
↓
②noとpointを比較して、一致したら
1、その行の二文字を2gramファイルから取り出して格納する。
2、forループをぬける
}
という順番で処理をしたときに、
①で文字が見つかればno+1となり、初期値が0のため noの値の範囲はno>=1になる。そうすると
②の比較をするさいにpointが0だった時、絶対にif文の条件が満たされなくなってしまう。
②が満たされないとforループの条件がすむまでループを抜けられなくなり、
その結果、point=0のときに2行目の頭を選んでくるようになってしまってた…ていうことでいいのかな…
なので②の条件式を、no==pointからno==point+1に書きかえるとうまく動くようになりました。
pointの元々の範囲は0から開始文字未満なので、たぶんこれで逆に大きすぎるとかの問題は起こらないはず…
いったん記事保存
同じ文字が出てくる原因は、2gramファイル内に該当文字がある場合の処理関数内での、if文の条件がおかしかったのが原因でした。
point→num(開始文字の回数以下の乱数。0<=point<開始文字の回数)
no→初期値0,開始文字と2gramファイルの文字を比較して一致したときに1ずつ増える。
(開始文字に指定された文字がファイル内に存在すればn=n+1)
(最初の入力文字以外の連鎖は必ずファイル内に存在するはず?)
の2つ変数があって
forループ(2gramファイルの全体の行数分の回数){
①開始文字とファイル内の文字の行の頭を比較して、一致したらno+1をする
(最大で開始文字で始まる2gramの数までnが増える)
↓
②noとpointを比較して、一致したら
1、その行の二文字を2gramファイルから取り出して格納する。
2、forループをぬける
}
という順番で処理をしたときに、
①で文字が見つかればno+1となり、初期値が0のため noの値の範囲はno>=1になる。そうすると
②の比較をするさいにpointが0だった時、絶対にif文の条件が満たされなくなってしまう。
②が満たされないとforループの条件がすむまでループを抜けられなくなり、
その結果、point=0のときに2行目の頭を選んでくるようになってしまってた…ていうことでいいのかな…
なので②の条件式を、no==pointからno==point+1に書きかえるとうまく動くようになりました。
pointの元々の範囲は0から開始文字未満なので、たぶんこれで逆に大きすぎるとかの問題は起こらないはず…
いったん記事保存
PR
作って実行してうまくいく事はいくけど、
連鎖先が1個しかない単語を先頭にした時、次に来る文字が絶対?「こ」になる(´・ω・`)
吾輩は猫であるの冒頭あたりを使ったけれど、吾→輩としかつながらないはずなのに
吾を先頭に指定すると全部「吾こ」で始まる文章を生成される…
文中に一度も使われない全角文字「☆」とかで試したら、こっちはちゃんとランダムに次の文字を決めている。
どこが悪いのか…
連鎖先が1個しかない単語を先頭にした時、次に来る文字が絶対?「こ」になる(´・ω・`)
吾輩は猫であるの冒頭あたりを使ったけれど、吾→輩としかつながらないはずなのに
吾を先頭に指定すると全部「吾こ」で始まる文章を生成される…
文中に一度も使われない全角文字「☆」とかで試したら、こっちはちゃんとランダムに次の文字を決めている。
どこが悪いのか…
C言語でn-gramとかの分解プログラム内に出てくる
char型の変数 = '\0';
の\0は、「終端を意味する」そうです。
if(char[XXX]!='\0'){ …… };
→char[XXX]の文字列の長さが0出ないときに括弧内の処理をする
っていうのはわかるけど、
char[i][5]='\0';
って代入するときはどうなるんだろう。そこで文字列をストップってことでいいのかな…。
char型の変数 = '\0';
の\0は、「終端を意味する」そうです。
if(char[XXX]!='\0'){ …… };
→char[XXX]の文字列の長さが0出ないときに括弧内の処理をする
っていうのはわかるけど、
char[i][5]='\0';
って代入するときはどうなるんだろう。そこで文字列をストップってことでいいのかな…。
テキスト処理のプログラムを作った。
とりあえずただの1-gram分布作成プログラムです。
コマンドプロンプトで実行するときに
プログラム名 <入力ファイル名 >出力ファイル名
って書いてからエンターキー押すと、勝手に読みこんで勝手に書き出してくれるそうです。便利。
とりあえずただの1-gram分布作成プログラムです。
コマンドプロンプトで実行するときに
プログラム名 <入力ファイル名 >出力ファイル名
って書いてからエンターキー押すと、勝手に読みこんで勝手に書き出してくれるそうです。便利。
ゼミでした。今週はあんまり進まなかった…。
人工知能の本を読んでいたので分かったこととか発表しただけなのですが、
人工知能と人工無能の違いについての話になりました。
人工知能は元々結構あいまい…というか、意味の広い言葉のようです。
人工知能は文字通り人工的に知能を持たせた存在の事ですが、
読んだ中で一番基本的(らしかった)人工知能の定義は
実験者にA、Bの相手(どちらかがコンピュータ)とそれぞれチャットで会話してもらい、
実験者がAとBどちらがコンピュータかわからなければ、それは人工知能になる そうです。
でもこの定義だとものすごくよくできた人工無能=人工知能になりますね。
だから表面的な会話だけに限ってみれば、人工知能と人工無能は大差ないみたいです。
ただ文字が示す通り人工無能は知能を持っていないので、
中で行っている処理のしかたとかが一番の違いになるのかなと思いました。
人の言葉を意味を持つ言葉として「理解して」応答するのが人工知能で、
人の言葉を意味を気にせず文字の集まりとして「処理をして」応答するのが人工無能…みたいな。
なんかそんな感じなのかなと思いました。
来週のゼミまでには自然言語処理の章読みたいのと、コードが載っているので作ってみたいです。
人工知能の本を読んでいたので分かったこととか発表しただけなのですが、
人工知能と人工無能の違いについての話になりました。
人工知能は元々結構あいまい…というか、意味の広い言葉のようです。
人工知能は文字通り人工的に知能を持たせた存在の事ですが、
読んだ中で一番基本的(らしかった)人工知能の定義は
実験者にA、Bの相手(どちらかがコンピュータ)とそれぞれチャットで会話してもらい、
実験者がAとBどちらがコンピュータかわからなければ、それは人工知能になる そうです。
でもこの定義だとものすごくよくできた人工無能=人工知能になりますね。
だから表面的な会話だけに限ってみれば、人工知能と人工無能は大差ないみたいです。
ただ文字が示す通り人工無能は知能を持っていないので、
中で行っている処理のしかたとかが一番の違いになるのかなと思いました。
人の言葉を意味を持つ言葉として「理解して」応答するのが人工知能で、
人の言葉を意味を気にせず文字の集まりとして「処理をして」応答するのが人工無能…みたいな。
なんかそんな感じなのかなと思いました。
来週のゼミまでには自然言語処理の章読みたいのと、コードが載っているので作ってみたいです。