#author("2025-03-28T11:09:05+01:00","","")
#author("2025-04-01T02:39:25+02:00","","")
[[技術資料]]

*勉強計画プログラムの引継ぎ [#w1274653]

python 3.11で実行確認済み

&color(red){中市先輩の技術資料からは細かな部分に変更があるため、こちらのほうだけを確認し作業する様に};

*中市 [#xc15ee0d]

iie.lab.tpu.2324にアクセス.

中市のページを開く,それを前提にして話す.~
**MeCab [#tcd4a843]
***MeCabについて [#ga8ef934]
MeCab は日本語の形態素解析エンジンの一つで、文章を単語(形態素)ごとに分割し、それぞれの品詞を解析するツール

--高精度な解析:辞書を利用して単語の品詞を判定

--軽量かつ高速:大規模なテキスト処理にも対応

--カスタマイズ可能:独自辞書を追加して特定の分野向けに最適化可能

MeCabは、自然言語処理の分野で広く利用されており、形態素解析が必要な検索エンジン、機械翻訳、テキストマイニングなどに役立つ

***MeCab導入方法 [#tb1613d4]
-Mecab をインストールする
--Python に MeCab を pip した後に、PC本体にも入れる必要がある
 https://github.com/ikegami-yukino/mecab/releases/tag/v0.996
-パスを通しておく(システム環境変数の編集で変数Pathを編集する)

-新規でmecab.exeがあるパスを追加する
 C:\Program Files\MeCab\bin\
~
*** MeCab導入確認[#nb96e344]
-下のMeCabテスト用のプログラムを実行して結果が出れば問題ない
#ref(MeCab_test.ipynb,,MeCab_test.ipynb)

~
** 辞書の更新(MeCab)[#q0bc128b]

***辞書(dic)について[#xb395eab]
-どのような単位で単語を区切るかなどのルールを記したもの
-辞書はなるべく頻繁に更新したほうがいい
--デフォルトの辞書(2007年版?)では「進撃の巨人」に対して「進撃 の 巨人」という分析をしてしまう~
--辞書を日々更新することで流行語などを正確に1つの単語として分析してくれる

***辞書の更新方法 [#f0bf9d1c]

文章から不必要な文字列を除去し,Mecabの辞書に基づいて単語単位に分割する

-インストールしたMecabには古い辞書しか入っていないので、NEologdという新しい辞書を追加する

//-C:\Program Files\MeCab\dic 内に配布フォルダ内dicの中のneologdをコピーする
//--MeCabをPCにインストールすると基本Program Filesの中に入る?

-GoogleDrive(iie.lab.tpu.1920)の平松さんのページに行き、「neologd.zip」をDLする
-解凍したneologdの中身のmecab-ipadic-neologdをdicのフォルダにコピーする

--dicの中でipadic-UTF8を作成しipadicの中身を全部コピぺする
--同様に空のフォルダneologdも作成する

-管理者権限でコマンドプロンプトを起動し(管理者として実行),ipadic-UTF8のディレクトリに移動し,ipadicの中身をUTF8に変換する
 cd "c:\Program Files\MeCab\dic\ipadic-UTF8"
 mecab-dict-index -f utf-8 -t utf-8

-Neologdの辞書をコンパイルする
 cd "c:\Program Files\MeCab\dic\mecab-ipadic-neologd\seed"
 mecab-dict-index -d "c:\Program Files\MeCab\dic\ipadic-UTF8" -u NEologd.20200820-u.dic -f utf-8 -t utf-8 mecab-user-dict-seed.20200820.csv

-mecab-ipadic-neologdのフォルダ内に作られた「NEologd.20200820-u.dic」を先ほど作った空のneologdフォルダに移動させる

-Program Files/MeCab/etcの中にあるmecabrcをメモ帳で開き,下の一行を追加する
  ; userdic = /home/foo/bar/user.dic
 userdic = C:\Program Files\MeCab\dic\neologd\NEologd.20200820-u.dic
-- エラー対応(mecabrcを上書き保存する際、「アクセス許可がない」という旨のメッセージが出るとき
--右クリックでmecabrcのプロパティを開き、Usersの「書き込み」にチェックを入れる

**スクレイピング関連 [#i3c68376]


スクレイピング.zipをダウンロード

このスクレイピングのところでエラーが出る場合は,Seleniumのバージョンが最新になってる可能性があるので4.1.0以降にする.(最新版だとプログラムの書き方が変わったから)

keyword.csvを書き換えると検索ワードが変化する.

***Google Driver [#h860cb3d]
chromeを使ったスクレイピング,実際に画面が現れ遷移するのが特徴~
chromeは勝手に更新するので常に最新版になっている~
そのためdriverも常に更新し続けなければならない~
[[ここからchromeのバージョンにあったものをダウンロードする>https://googlechromelabs.github.io/chrome-for-testing/#stable]]~
一回サイトの場所が変わってるので,また変わるかもしれない 注意~
pipでインストールすることもできるだろうが,わかりやすいしスクレイピング実行ディレクトリに入れとくだけでもいい.~
sakusei_sale.pyを実行

***youtube api v3 [#ke4fbce5]
youtubeのスクレイピングを一瞬でできるapi~

[[apiキー取得方法>https://zenn.dev/eito_blog/articles/f2d870ffddb636]]~

このAPIキーを使用することによりプログラムを利用して動画情報やチャンネル情報の取得ができるようになる。

video_sakusei.py の api_key を取得したものに書き換えて実行


make_database.pyを実行することで,app.pyで使えるファイルに変化する。

例として作成したものが "教材データ.zip" である。


**html作成関連 [#i3c68376]

膨大な量のhtmlが必要であるので繰り返しを使ってhtmlを作っている.

ドライブからhtml作成.zipをダウンロードする

first/html.pyは教材ページに飛ぶまでの中間地点をつくる.~
派生するならここにキーワードを入れるといいとおもう.

second/kyouzai.pyは教材ページを作る

作科目単元カテゴリ,理解度作成.zipをダウンロードし,
rikai_html_sakusei1(小学生)2(中学生)or3(高校生).pyを実行するとメインプログラム/app/templatesのrikai1(小学生)or2(中学生)or3(高校生).htmlが作成される.
~

**メインプログラム [#t02c6b47]

メインプログラム.zipをダウンロード
app.pyを実行する.

その後ローカルホスト
 http://127.0.0.1:5000
にアクセス.

実行できなかった時必要なモジュールを入れる.


実行後に、スクレイピング等を省略したい場合は "html作成サンプル.zip","教材データ.zip"をメインプログラム内に上書きすることで利用可能になる。

--html作成サンプル → html作成サンプル/templates を メインプログラム/templates に置き換え

--教材データ → 教材データ/教材 の中身を メインプログラム/Kamoku に置き換え


**補足資料 [#m8d07d36]
システム全体に関する解説資料
#ref(プレゼンテーション1.pdf,,データ攻略本.pdf)

ドライブ内の動画を見て,システムの動きを確認~
発表資料をみて,システムの大まかな動きを確認.~
それでもいまいちわからなければ仕方ないので本論を確認.



*変更点 [#u81ff448]

iie.lab.tpu.2324にアクセス.

島崎のページを開く,それを前提にして話す.~

**メインプログラムの置き換え [#gd48c2d4]

ファジィ版メインプログラム.zipをダウンロード

メインプログラムの中身をファジィ版メインプログラムの中身で置き換える。

中にはapp.pyやappf.pyがあるがappf.pyを実行する.

&color(red){確認時の実行プログラム};
#ref(確認時の実行プログラム.zip)

島崎のプログラムではなく,中市さんの学習支援システムを実行したい場合は中市さんのGoogledriveからzipファイルを持ってくるかapp.pyを実行すると中市さんのプログラムが動く.

&color(red){山本さんが実行した中市さんのプログラム};
#ref(中市さんの実行プログラム.zip)

**ファジィ変数を用いたCPM [#ya4d477c]
以前までのプログラムでは与えられた数値によってCPMを計算していたがファジィ性を持たせるためにαカットしたCPMの結果を出すプログラムを追加した.
#ref(fuzzy1.png)
この画像はその追加したプログラムの一部である.どのような計算を行っているかの詳細が知りたい場合は島崎の卒業論文の本文を見ることでわかる.

この画像ではαカットの関数を定義して,LFやLSに対してupperとlowerの値を与えることによってCPMに不確実性(ファジィ)を追加して計算することができる.

**対話型システム [#v4360ce5]

今回作成した対話型システムには多くの改善点があると思う.
#ref(fuzzy2.png)
この画像は対話型としてコマンドプロンプトに直接選択肢を渡す形式になっているのでここはホームページ上に乗るようにするほうが見栄えがよいと思う.
また,対話型としては完ぺきではないので改善してほしい(願望)

実行例としては,勉強時間に対して単元ごとの時間を割り当てたときのどれくらい圧迫しているかという指標として圧縮率を提示してまた,その圧縮率に対応したスケジュールを提案してそれに応じたものをユーザーに選んでもらうという形になっている.

**数値実験 [#ga41451c]
この研究内容の数値実験に関するプログラムは、数値実験用プログラム.zipにある。
fazzy2のプログラムは下のパスについてファジィ性を持たせたCPMで解いたものとなっている。fazzy2ではLP法を用いて解いている。ntlp2ではLP法を用いずES,EFを用いて解いている。LP法については論文を参照してプログラムを作成している。二つのプログラムの結果が同じになっている。(中間発表)
#ref(path.jpg)
--fazzy2.py
#ref(fazzy2.png)
--ntlp2.py
#ref(ntlp2.png)

ファジィ性を含まずにCPMをLP法とES,EFを用いた結果の比較となっている。結果を見てわかるように同じ値になるということがわかる。この解いたパスは結果のしたの図になっている。
--cpmf.py
#ref(cpmf_1.png)
#ref(cpmf_2.png)

*エラー箇所の修正進捗 [#bfac56e8]
-現在、このプログラムには以下のエラーが確認されている。
--スケジュール日程作成実行時にuserdataフォルダが生成されない問題~
※島崎が3/27中に記入予定

このエラーは,元の(中市さん)のプログラムではしっかりと保存されているため文字化けを直すために文字エラーを変更したことによって起きたと考えられる.しかし,文字コードを戻して行っても生成されなかった.島崎が書いたプログラムの場所を変えずに文字コードだけをもとに戻したため島崎のCPMの部分が関係している可能性がある.userdataの部分のプログラムは変えていないためCPMの部分かスケジュール作成関数の部分のプログラムが干渉して保存されていない可能性がある.CPMの部分は,卒論の4.2章で解いたクリティカルパスを参考にしてプログラムを作成したため間違っている可能性は低いが保存の部分がうまくいっていない場合がある.

--スケジュール日程作成実行時に文字コードエラーが発生する問題~
CMD上で使用されている文字コードは hift_JIS であるのに対して、サイト上で使用している文字コードが UTF-8 であるため、生成されるcsvファイルの文字コードを改善しても修復できない。~
CMD上で使用する文字コードをUTF-8にした方が早いため、appf.pyの中に以下のコードを追記
 import sys
 import io
 
 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
これによってCMD上で使用される文字コードが UTF-8 になるはずだが、もう一つのエラーを修正しない限り検証できない。

*実際に使用したシステムの操作ガイド [#bfac56e8]

**1. 新規登録 [#w02a2586]
--ユーザーID、パスワード、ニックネームを入力し、アカウントを作成する。


**2. ログイン [#j900f90f]
--登録したユーザー情報を使用してログインする。  
#ref(wi1.png)

**3. 学習可能時間の設定 [#l4b7d844]
--画面右上で勉強可能な時間帯をクリックして選択し、入力が完了したら「合計時間を保存」ボタンを押して保存する。  
#ref(wi2.png)

**4. テスト日程の追加 [#ld824b0a]
--画面左下の「予定追加」ボタンを押し、表示される青いボックスをドラッグしてテスト日程に配置する。配置が完了したら、「書き込み」ボタンを押して保存する。  
#ref(テスト日程.png)

**5. 理解度チェック [#o706969e]
--「理解度チェック」ボタンを押し、好きな項目を選択する。単元バーを動かしたり、チェックボックスをつけたりして理解度を記録する。  
#ref(単元.png)


**6.スケジュール日程作成 [#vc0693cc]
--スケジュール日程作成を押すと対話型システムに移行し、コマンドプロンプトにスケジュールが提示される.その選択肢を選ぶとスケジュールが作成され,好きなスケジュールを選ぶことが出来る [#g65429be]
#ref(001.png)


**7. スケジュール確認 [#s76cb4f4]
--再ログイン後、スケジュールへボタンを押し、表示されたカレンダーの日付をクリックしてスケジュールを確認する。
#ref(スケジュール確認.png) 

**8.教材の提示 [#g22d0a70]
--選んだスケジュールをもとにその日の学習内容とその教材が表示される。(ratio.csvがpathごとに作成されるが、文字化けが起きるためデータから情報の選択を行って変更しないといけない)
#ref(教材.png)

**9.系統図の作成、確認 [#jd257d94]
--系統図を作成を押すと、指定した科目の系統図が作成される。また、系統図グラフへを押すと作成した系統図が確認できる。
#ref(系統図.png)


[[中身>中身.nakaihci]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS