お知らせ
- 重要: 12月2日(火) は休講です。後日オンデマンドの補講を予定しています。
科目の位置づけ・概要
- 選択科目です。
- 講義および演習の科目で、プログラミングの演習があります。後半に時間かけて作成する課題があります。
- 3年次科目「知的処理および演習」の前提科目です。
この科目は AI・自然言語処理・情報推薦に興味がある人が履修する科目です。
- 本科目では、データの記述、収集、処理などの技術について学びます。
また、応用として、Web上のデータを取得して組み合わせるマッシュアップの演習があります。
環境
テキスト
- データとその表現
- データの収集と処理
- Web上のデータの取得
- ストリームを用いたファイルの読み込み
- ストリームを用いたWeb上のリソースの取得
- 文字列の処理
- フィード (RSS/Atom)
- XML文書とDOM
- Webサービス (Web API)
- HTML文書とDOM
- 形態素解析の利用
- 感情分析 [参考]
- 生成AI
- サンプルプログラム Python版
- 補足
- 最終課題: 自分の好きなテーマでマッシュアップ
- 複数のリソースから得られる情報を組み合わせて有益な情報を得る
マッシュアップのプログラムを作成しましょう。
- 上記プログラムのレポートを書きましょう。
- 詳細...
- レポートの提出が無かったり、レポートの内容がプログラムと整合していない場合には単位が出ません。
- 提出先: 授業フォルダの「最終課題」 (プログラム・レポート共通)
- 提出期限: 2026年1月9日(金) 23:59
- 発表会: 第14回
発表会
2026年1月13日(火)に最終課題の発表会を開催します。
- 発表手順
- 学籍番号と名前を述べる。
- プログラムのタイトルを示し、何をするプログラムなのか概要を説明する。
- デモをする。(できない場合は過去の実行結果を提示)
- プログラムの中で、特にアピールしたい工夫点を述べる。
- 質疑を受ける。
- 発表時間: 発表5分、質疑5分程度を想定。
- 発表者: 立候補優先 + 当日指名。
- 楽しんで作成した人は、ぜひ披露しましょう。
- プログラムの完成度が低くても、
結果が面白そうだと指名されることがあります。
指名されるか否かと成績は必ずしも一致しません。
- 評価との関係: 提出物に対する評価点が、発表の内容により見直されます。
発表では工夫点を直接アピールできるため、
レポートよりも成果を認められやすい傾向にあります。
Boxで「データエンジニアリング(2025)」
という名前のフォルダが共有されています。
その中に各回のフォルダが用意されていますので、
出題回のフォルダの直下に学籍番号のフォルダを作成し、
その中に提出物をコピーしてください
(Box Driveの利用をおすすめします)。
なお、他の人と同じファイルを提出すると 0点以下の点数になります。
- 課題12
- 最終課題の制作の途中経過
最終課題のプログラムでは複数のリソースを取得することになります。
それぞれのリソースを取得するプログラムをまず作成しましょう。
すでに複数のリソースからの情報抽出を終えている人は、それらの情報を組み合わせるプログラムを作成しましょう。
- 複数のリソースを取得するプログラムを一体のものとして動作させることになります。
それを想定したクラスの構成にしておきましょう。
- マッシュアップの機能は作成途中でかまいません。途中経過を提出してください。
- ファイル名: (指定なし)
- 備考: プログラムが動作していない人も、作成途中のものを提出すること。
- プログラムの構想 [更新した人のみ]
プログラムの構想を変更した人は、改訂版のスライドを提出してください。
- ファイル名: システム構想.pptx (PowerPointを使わない人は PDF でも可)
- 提出先: 授業フォルダの第12回
- 提出期限: 次回(12/23)の前日 22:00
- 課題11
- 課題10
- プログラムの構想
最終課題のプログラムの構想をスライドにまとめましょう。
以下の内容を含めてください。
- 実現する機能の概要
- 使用するリソースごとの概要と形式(以下をリソースの数だけ記述)
- 概要
- 提供元
- ベースURL
- 形式: Webサービス | RSS | Atom | HTML | その他
- システムの概要が分かる図
- システムの入出力と内部のデータの流れがわかるもの。
- 事前にデータを集めておく場合は、それも表現すること。
- ファイル名: システム構想.pptx (PowerPointを使わない人は PDF でも可)
- 備考: 構想は確定ではなく、後での変更も可とします。
- 提出先: 授業フォルダの第10回
- 提出期限: 次回(12/9)の前日 22:00
- 課題9
- 課題8
- 課題8: Web APIの利用
課題7で探した Web API(Webサービス)を利用してみましょう。
- この課題は任意です。
実際に利用したい Web API が見つかっていない場合には先送りしてください。
- 提出: なし
- 期限: なし
- 課題7
- 課題7: Web APIの発見
自分の興味のある分野の情報が得られる Web API(Webサービス)を見つけてください。
よいものがあれば最終課題で扱う情報の1つになるかもしれません。
- 1つ以上見つけてください。
興味のある分野で見つからなければ、他の分野でもかまいません。
- 仕様 (リクエストのパラメータ/レスポンスの構造) を確認してください。
- 提出: なし
- 期限: 第8回(11/11)の授業前まで
- 課題6: フィードからの情報の取得
- 課題6a: item要素の追加情報の取得
item要素の中に title, link, description 要素以外の要素を含むフィードを探し、
その要素からも情報を取り出して表示しましょう。
- pubDate, creator, date, など、いろいろな種類があります。1つ以上を対象としてください。
- 名前空間接頭辞を無視する場合、要素の指定は dc:date ではなく date となります。
- Feed クラス、Item クラスを改造する必要があります。
- 補足: FeedItemViewer を main メソッドのあるクラスとし、
そこから Feed クラスを利用する構成にしてください。
FeedItemViewer, Feed, Item の 3 つのクラスは同じパッケージに属するようにしてください。
なお、Feed クラスの mainメソッドは使用しません。
Feed クラスの mainメソッドでしていることは、
FeedItemViewer クラスの main メソッドですることになります。
- ファイル名: FeedItemViewer.java, Feed.java, Item.java
- 課題6b: item要素の絞り込みまたはソート
情報を取り出す item要素を絞り込んだり、item要素から取り出した情報をソートしたりしてみましょう。
絞り込みとソートのどちらかでも、両方でもかまいません。
- item 要素の絞り込みの方法は、XPath 式でも、item要素の子要素から取り出した情報で判断するのでもかまいません。
- 課題6a と同じパッケージにすると、Feed クラス、Item クラスが共通になることに注意しましょう。
別のクラスにしたい場合は、パッケージを別にするか、クラス名を変更しましょう。
- クラス定義の直前の位置のコメントに機能の説明を書いておいてください。
- 補足: FeedItemExtractor を main メソッドのあるクラスとし、
そこから Feed クラスを利用する構成にしてください。
3 つのクラスは同じパッケージに属するようにしてください。
なお、Feed クラスの mainメソッドは使用しません。
- ヒント(ソート):
Item クラスに Comparable<Item> インタフェースを実装する、
つまり compareTo(Item) メソッドを実装して
Item オブジェクト間の比較ができるようにすると、
Itemオブジェクトの入った ArrayList<Item> を
Collections.sort メソッドでソートできるようになります。
(Comparatorを使っても可)
- ファイル名: FeedItemExtractor.java,
Feed.java,
Item.java (Feed, Item クラスは名称変更してもよい)
- 提出先: 授業フォルダの第06回
- 提出期限: 次回の前日 22:00
- 課題5
- 課題5: フィードの発見
自分の興味のある分野の情報が得られるフィードを見つけてください。
よいものがあれば最終課題で扱う情報の1つになるかもしれません。
- 2つ以上見つけ、URL を控えておいてください。
- 仕様 (RSS 1.0 / RSS2.0 / Atom)、文字コード、取得可能な件数(item要素の数)を確認してください。
- リクエスト時にパラメータを与える仕様の場合にはパラメータの仕様も確認しましょう。
- 提出: なし (次の課題で情報の取得対象として使います)
- 期限: 第6回(10/21)の授業前まで
- 課題4
- 課題4: Webページからの情報抽出 (正規表現を使用)
Yahoo! ショッピングの任意の商品のページを取得し、その商品の送料を調べましょう。
正規表現を活用してください。
また、送料の値を整数値として得るようにしましょう。送料無料の場合は 0、送料不明の場合は -1 の値を取るようにしてください。
- 「送料〇〇円」の「〇〇」の部分を抜き出す正規表現を考えてみましょう。送料が4桁以上の場合、3桁ごとに「,」が入ることに注意しましょう。
また、HTMLのソースでは送料の値の前後にHTMLのコメント <!-- --> が入っていることに注意してください。例えば「送料<!-- -->1,190<!-- -->円」などとなっています。
- NumberFormat クラスを用いて、文字列を数値に変換しましょう。例外処理を忘れずに。
- ファイル名: YahooShoppingShippingExtractorIntValue.java
- 提出先: 授業フォルダの第04回
- 提出期限: 次回の前日 22:00
- 課題3
- 課題3: Webページからの情報抽出 (Stringクラスのメソッドを使用)
Yahoo! ショッピングの任意の商品のページを取得し、その商品が送料無料か調べましょう。
調べた結果はコンソールに表示してください。
String クラス
のメソッドを活用してください。
- 提出先: 授業フォルダの第03回
- 提出期限: 次回の前日 22:00
- 課題2
- 課題2: 「妥当な」XML文書ファイルの作成
自分が記述したいデータを決め、そのデータを記述するのに適したデータ記述言語を設計し、
実際にデータを記述してください。
記述する対象は、趣味のデータでもなんでもかまいません。
データ記述言語を設計するにあたっては、
意味的に適切な構造を持つようにしてください。
意味的に適切な構造を持つとは、例えば、実世界で階層構造を持つものは、
XMLの構造上も階層構造を持っている、といったことです。
5階層以上の構造を持つようにしてください。
- 提出先: 授業フォルダの第02回
- 提出期限: 次回の前日 22:00
- 課題1