エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

【Software-Design-2018年4月号】プロダクト開発の道しるべ プロダクトマネージャーの始め方のまとめ

プロダクトマネージャー

雇用形態により、分類分けできる。

ジョブ型雇用

職務を明確にした雇用。
職務が不要になる=無職になる。

海外では、一般的。
日本でやったら、職務が無くならないような裏工作をする輩が増えそう。。。

メンバーシップ型雇用

職務を明確にしない形での雇用。

配置転換や異動などが行いやすい。
従業員も雇用が守られやすい。

役割としてのプロダクトマネージャが求められる。
役割なので、当然、兼任の可能性がある。
そのため、特化して考えることが難しく、個人の裁量によってしまうことが多く、責任範囲が曖昧になりがり。

【Software-Design-2018年4月号】最新用語解説 FaaSまとめ

FaaS

サーバーレスアーキテクチャの一種。
特徴は、アプリ単位で起動・終了を管理するのではなく、サービス単位で必要なときに個別プロセスとして起動して、処理が終わったらすぐに終了させる。

FaaS のメリット・デメリット

メリット

  • APサーバを常時起動しなくてもいいため、運用が楽。
  • サーバ管理の知識不要。
  • 必要なリソースが小さい。
  • 利用時間のみ課金されるため、待機時間の費用が発生しない。(費用削減できる)

デメリット

  • 待機時間が少ないサービスとだと費用削減の効果が薄い。(費用増になる可能性がある)
  • サービス分割の必要があり、開発コストがかかる。
  • コード管理の煩雑化
  • テスト工数の上昇

個人的に思ったこと

これ、個人でしか利用しないサービスの場合は、かなり有利なのではなかろうか?
利用目的を特化すれば、デメリットが少ない気がする。

小さく初めて、サービスがでかくなったら、PaaSかIaaSに移行がベターだろうか?
使い所の見極めが重要そう。

日本語面倒くさい

suzaku-tec.hatenadiary.jp

上の記事の続き

日本語面倒くさい

「~する」ってやつの文節分けが非常に面倒くさい。

たとえば、「出発する」だと、自立語が2つあるから分かれると思うじゃん。
出発が名詞で、するが動詞になっているから、どっちも自立語。
だけど、単語としては一つの扱いなのよ。。。
だから、文節分けはできない。

この特殊な例は、サ変活用みたい。

日本語理解しようと思うと、結構難問が出てくる。
もっと楽に文節分けできないものだろうか?

色々ヤッていると、条件に手を入れまくるから、テストコードないと何の条件が間違ったのかさっぱり分からなくなる。

assertEqualsで迷った

きっかけ

テストコード書いたほうが実装早くなるんじゃね?って思って、テストコードを優先して書こうと思ったら、assertEqualsで結構迷ったので、記録として残しておこうと思い、書いた。

感想

assertEqualsの使い方は、下記の通り。

assertEquals(期待値, 実測値);

俺が迷ったのは、どっちが期待値で、どっちが実測値かどうか。
どっちやねん!って使っててかなり迷った。
引数の順番を気にしなければいけないのは、使う側にとって苦痛を強いていると分かった。

だから、本来は、もっと別な実装を提供スべきだと思いました。

たとえば、下記みたいな感じにすれば、迷うことは少ないのではなかろうか?

asset().expected(期待値).actual(実測値).equals()

学んだこと

  • 順番を気にする必要のある実装は、使う側にとって苦痛になる

文章解析の模索日記 文節分け

きっかけ

前回書いたのに引き続き、仕様を洗い出し

suzaku-tec.hatenadiary.jp

たぶん、1回で終わらないだろうから、何回かに分けて投稿する予定

仕様の模索

文節分け

言葉の単位を学ぼう - 国語の文法(口語文法)

文を文節に分けるには、「ネ」(「サ」)を入れても不自然にならない箇所で文を区切る。

システム的じゃない。。。

なんとなく例文を見ていて思ったのが、助詞・副詞・動詞で区切られているのではなかろうか?と思った。
試しに実装してみたら、なんとなくそれっぽくなった。

ただ、動詞で区切った場合、後続文字に助詞がくると、区切れないような結果になる。
たぶん、動詞で区切る時は、例外的な処置がいるのだろう。

主語と述語

主語は、まだ模索中。
おそらく、ない場合は、デフォルトで「私」になると思う。

【―が】のほかにも、【―は】【―も】などさまざまな形の文節が主語に

今の段階だと、システム的に選択できないので、やめよう。。。

「どうする」「どんなだ」「何だ」に当たる文節を述語とよびます。「ある(いる)」「ない」に当たる文節も述語です。 述語は、主語について説明する働きをします。 述語(文全体の述語)は、文の終わり(文末)にくることがふつうです。 しかし述語は、かならずしも文の終わりにくるとはかぎりません。

どうすりゃいいんだよぉぉ!!!!
倒置法は、厄介すぎるだろう!
中二病はこの世の悪だな。

なんとなくだが、助動詞か動詞を含んでいたら述語っぽい。
倒置であっても、ケツから舐めていって、一番最初にあたったやつがそうだろうな~って気がする。

もうちょっと、主語・述語は模索の必要性があるかも。。。

仕様の清書

文節分け

助詞・副詞・動詞で区切る。
ただし、動詞で区切る場合、次の文字が助詞でないこと。

参考サイト

主語と述語について学ぼう - 国語の文法(口語文法)

構文解析のための文法の勉強まとめ

きっかけ

構文解析していろいろ情報収集の補助をしようと思ったけど、形態素解析だけではダメだと感じた。
基本に立ち返って、文法の勉強をしようかと思い、ここに至る。

日本語の仕様を知りたくなった。

国語の文法

言葉の単位

  1. 文章
  2. 段落
  3. 文節
  4. 単語

※大きい順

文章

一つの内容をあらわした言葉の集まり全体を指す。
文章は、言葉の単位のなかで最も大きい。

段落

文章を内容ごとに区切った各部分のこと。

句点によって区切られた言葉の集まり。
1語であっても文が成立することもある。
また、主語がないことがあるのが日本語の特徴。

文節

文を言語として不自然でない程度に区切った最小の単位。

単語

特定の意味と働きをもつ最も小さなことばのまとまり。

文節の働き

  • 主語
  • 述語
  • 修飾語
  • 接続語
  • 独立語

主語と述語

文は、まず「何が」に当たる文節があり、それに対応する「どうする」「どんなだ」「何だ」「ある(いる)」が後に続く。

主語

「何が(だれが)」に当たる文節。

【―が】【―は】【―も】などさまざまな形の文節が主語になりうる。

述語

「どうする」「どんなだ」「何だ」に当たる文節のこと。 主語について説明する働きをする。

述語は、文の終わり(文末)にくることが多いが、必ずしも文の終わりにくるとはかぎらない。

述語が主語などの前にくる表現は、倒置法という。 倒置法は、中二病患者が好きな表現だ。俺は後遺症でよく使う。

主語・述語の関係

主語と述語との間には、主語は述語にかかり、述語は主語を受けるという関係がある。
主語・述語の関係は、文の骨格なので、文の成り立ちを知るには、主語・述語となる文節を特定することが重要。

主語・述語の見つけ方

  1. 文を文節に分ける。
  2. 文末に着目して述語を見つける。
  3. その述語に対応する主語をさがし出す。

修飾語

修飾語は、被修飾語(修飾語によって説明される文節)よりも前にくる特徴がある。
体言の文節にかかる修飾語を連体修飾語、用言の文節にかかる修飾語を連用修飾語という。

修飾語とは

他の文節にかかってその意味をくわしく説明する文節のこと。
1語からなる修飾語もあれば、2語以上からなる修飾語もある。
【―は】の形の文節は、主語になるだけでなく、修飾語になることもある。

修飾語と被修飾語の関係

修飾語によって説明される文節を被修飾語と呼ぶ。
原則として修飾語は被修飾語よりも前にくる。 ただし、被修飾語の直前に修飾語があるとは限らない。
修飾語と被修飾語との間に別の関係の文節が入ることもある。

連体修飾語と連用修飾語

体言を含む文節にかかる修飾語を連体修飾語と呼ぶ。
用言を含む文節にかかる修飾語を連用修飾語と呼ぶ。

接続語

文と文、あるいは文節と文節などを結びつけて、前後の事柄とどのような関係にあるかをあらわす働きをする文節を接続語と呼ぶ。
接続語とまぎらわしい文法用語に接続詞・接続助詞というものがある。
接続語は文節の働きを指すが、接続詞・接続助詞は単語の種類を指すという点にある。

独立語

文中の他の文節と直接の関係がなく、独立している文節を独立語とよぶ。 独立語は、文の最初にあって、感動・呼びかけ・応答・提示などの意味をあらわす。

単語の基本的な分類

  1. 自立語と付属語
  2. 活用がある語と活用がない語
  3. 品詞の分類

自立語

文節の最初にくる単語を自立語。
一つの文節にかならず一つだけ存在する。

自立語とは、単独で文節をつくることができる単語である。

特徴

  1. 単独で文節をつくることができる。
  2. 必ず文節の最初にくる。
  3. 一つの文節に自立語は必ず一つあり、二つ以上はない。

付属語

つねに自立語のあとに付けて用いられる単語を付属語という。
かならず自立語のあとに付き、付属語だけで文節をつくることができない。

一つの文節に付属語がまったくなかったり、二つ以上あったりする。

特徴

  1. 単独で文節をつくることができない。
  2. つねに自立語のあとに付く。
  3. 一つの文節に付属語がない場合や、二つ以上ある場合もある。

単語の活用

単語のなかには、文中での用いられ方によって、形が変化するものがある。
文中での用いられ方によって単語の形が変化することを活用という。

活用がある語と活用がない語

  • 形が変化する単語を活用がある語(活用する語)
  • 形が変化しない単語を活用がない語(活用しない語)

単語は、その形が変化するかどうかによって、活用がある語と活用がない語とに分けることができます。

自立語・付属語と活用の有無

自立語と付属語のそれぞれに活用がある語と活用がない語の両方がある

見分け方

活用がある語とない語は、「ナイ」「タ」などの語を続けて単語が形が変わるかどうかによって見分ける。

品詞の分類

単語は、まず自立語と付属語に区別することができる。
さらに、自立語と付属語は、それぞれ活用がある語と活用がない語に区別することができる。

活用がある自立語

自立語で活用がある単語は、その基本形(辞書の見出しの形)によって三つのグループに分類できる。
動詞・形容詞・形容動詞をまとめて用言という。
用言には、単独で述語になることができるという特徴がある。

動詞

単語の基本形が五十音図のウ段の音で終わるグループ

形容詞

単語の基本形が「い」で終わるグループを形容詞

形容動詞

単語の基本形が「だ」で終わるグループを形容動詞

活用がない自立語

名詞

おもに主語になるグループ

副詞

連用修飾語(用言を修飾する文節)になるグループ

連体詞

連体修飾語(体言を修飾する文節)になるグループ

接続詞

接続語になるグループ

感動詞

独立語になるグループ

付属語

助動詞

付属語で活用があるもの

助詞

付属語で活用がないもの

品詞分類表

  • 単語
    • 自立語
      • 活用あり
        • 述語になる(用言)
          • ウ段で終わる ⇨ 動詞
          • 「い」で終わる ⇨ 形容詞
          • 「だ」で終わる ⇨ 形容動詞
      • 活用なし
        • 主語になる(体現) ⇨ 名詞・代名詞
        • 修飾語
          • 用言を修飾 ⇨ 副詞
          • 体現を修飾 ⇨ 連体詞
        • 接続後 ⇨ 接続詞
        • 独立後 ⇨ 感動詞
    • 付属語
      • 活用あり ⇨ 助動詞
      • 活用なし ⇨ 助詞

品詞の転成

ある品詞の単語がほかの品詞に転じることを品詞の転成という。
品詞の転成で多いのは、動詞や形容詞の連用形が名詞になる場合。

指示語

話し手と聞き手との関係を基準にして物事を指し示すような働きをする語のこと。
「ここ」「あそこ」「それ」「これ」は、ある場所や物を指すが、具体的な場所や物を言いあらわすものではない。
それでも、日常的に役立つのは、話し手と聞き手との関係によって、具体的に特定する働きを持っているからだと思われる。

近称

話し手に近い物事を指す語

中称

聞き手に近い物事を指す語

遠称

話し手・聞き手のどちらからも遠い物事を指す語

不定

遠近が定まっていない場所・物事を指す語

複合語

二つ以上の単語が合わさってできた語

複合名詞

二つ以上の単語が合わさっている名詞

複合動詞

二つ以上の単語が合わさっている動詞

複合形容詞

二つ以上の単語が合わさってできた形容詞

派生語

単語(語基)に接辞がついてできた語

派生語の名詞

  • 接頭語がついたもの
  • 接尾語がついたもの

派生語の動詞

  • 接頭語がついたもの
  • 接尾語がついたもの

派生語の形容詞

  • 接頭語がついたもの
  • 接尾語がついたもの

派生語の形容動詞

  • 派生語の形容詞

文の組み立て

文節の種類

切れる文節

文の最後にきて、文がそこで切れる文節

続く文節

文の最初や途中にあって、うしろに他の文節が続く文節

係る文節

前の文節から見て、文節どうしが意味のうえで結びついていること

受ける文節

後の文節から見て、文節どうしが意味のうえで結びついていること

文節相互の関係

  • 主語・述語の関係(主・述の関係)
  • 修飾・被修飾の関係
  • 接続の関係
  • 独立の関係
  • 並立の関係
  • 補助の関係

連文節

連文節とは、連続した二つ以上の文節が、まとまって一つの文節のように振る舞うもの。 働きによって、主部・述部・修飾部・接続部・独立部が存在する。

並列の関係や補助の関係にある文節は、常に連文節となる。

文の成分

  1. 主語(主部)
  2. 述語(述部)
  3. 修飾語(修飾部)
  4. 接続語(接続部)
  5. 独立語(独立部)

文の成分の位置

  • 述語(述部)は、文の最後
  • 主語(主部)や修飾語(修飾部)は、述語(述部)より前
  • 主語(主部)と修飾語(修飾部)の位置関係は一定でない(入れ替えできる)。
  • 接続語(接続部)や独立語(独立部)は、文の最初にくることが多い

また、文の成分が倒置または省略されることがある。

文の種類

構造による分類

  • 単文
  • 重文
  • 複文
単文

主語・述語の関係が、1個だけある文。

重文

主語・述語の関係が2個以上存在し、対等に並んでいる文。

複文

主語・述語の関係が2個以上存在し、対等の関係でない文。

意味による分類

  • 平叙文
  • 疑問文
  • 感動文
  • 命令文
平叙文

疑問文・命令文・感動文のいずれでもないふつうの文

疑問文

疑問または反語の意味をあらわす文

感動文

感動の意味をあらわす文

命令文

命令・禁止・願望の意味をあらわす文

国文法のコツ

文を文節に分けて、文節の最初の単語が自立語で、それ以外が付属語。

参考サイト

国文法をわかりやすく解説 - 国語の文法(口語文法)

今後

これを仕様化すれば、日本語の意味を比較できたりできるはず。

kuromoji.jsを使ってみる

きっかけ

文章の解析をしてみたくなったから

環境

  • Windows10
  • Typescript 2.5.3
$ tsc -version
Version 2.5.3

準備

node, typescriptのインストールは省略。
あと、プロジェクトの初期化も省略

kuromojiのインストール

まずは、kuromoji.jsを入れる。
Typescriptでやるので、型定義ファイルも一緒に入れる。

npm install -S kuromoji @types/kuromoji

実装

index.tsに下記の通りに実装。

import * as kuromoji from 'kuromoji';

class Demo {

  constructor() {

    const builder = kuromoji.builder({
      dicPath: 'node_modules/kuromoji/dict'
    })

    builder.build((err, tokenizer) => {
      if (err) return;

      var tokens = tokenizer.tokenize("有給を取るとなぜか雨が降る");
      console.dir(tokens);
    })
  }
}

new Demo();

実装説明

解析器の作成

    const builder = kuromoji.builder({
      dicPath: 'node_modules/kuromoji/dict'
    })

上記で解析器を造っているようです。
dicPathが辞書のあるパスだそうです。
特に強いこだわりがなければ、kuromojiと一緒に入ってくるものを指定すれば問題ないでしょう。

解析

    builder.build((err, tokenizer) => {
      if (err) return;

      var tokens = tokenizer.tokenize("有給を取るとなぜか雨が降る");
      console.dir(tokens);
    })

最初に、err を見ているのは、解析器の生成に失敗してないかチェックするため。
解析器の作成のタイミングでエラー出せや!って思わなくもないですが、事情もあるのでしょう。

tokenizer.tokenize で文章を指定すると、構文解析された結果情報が得られる。

あと、「有給を取るとなぜか雨が降る」に、特に深い意味はありません。
今日、たまたま有給をとったら、そうなってしまったという事実です。
でも、前回の有給を取った日も雨だったような。。。
家から出るなと言う暗示ですかね?

実行結果

tsc index.ts && node index.jsコンパイル&実行。
そうすると、以下の結果が返ってくる。

[ { word_id: 31860,
    word_type: 'KNOWN',
    word_position: 1,
    surface_form: '有給',
    pos: '名詞',
    pos_detail_1: '一般',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: '有給',
    reading: 'ユウキュウ',
    pronunciation: 'ユーキュー' },
  { word_id: 92880,
    word_type: 'KNOWN',
    word_position: 3,
    surface_form: 'を',
    pos: '助詞',
    pos_detail_1: '格助詞',
    pos_detail_2: '一般',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: 'を',
    reading: 'ヲ',
    pronunciation: 'ヲ' },
  { word_id: 3094480,
    word_type: 'KNOWN',
    word_position: 4,
    surface_form: '取る',
    pos: '動詞',
    pos_detail_1: '自立',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '五段・ラ行',
    conjugated_form: '基本形',
    basic_form: '取る',
    reading: 'トル',
    pronunciation: 'トル' },
  { word_id: 92550,
    word_type: 'KNOWN',
    word_position: 6,
    surface_form: 'と',
    pos: '助詞',
    pos_detail_1: '接続助詞',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: 'と',
    reading: 'ト',
    pronunciation: 'ト' },
  { word_id: 11480,
    word_type: 'KNOWN',
    word_position: 7,
    surface_form: 'なぜ',
    pos: '副詞',
    pos_detail_1: '助詞類接続',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: 'なぜ',
    reading: 'ナゼ',
    pronunciation: 'ナゼ' },
  { word_id: 92700,
    word_type: 'KNOWN',
    word_position: 9,
    surface_form: 'か',
    pos: '助詞',
    pos_detail_1: '副助詞/並立助詞/終助詞',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: 'か',
    reading: 'カ',
    pronunciation: 'カ' },
  { word_id: 465170,
    word_type: 'KNOWN',
    word_position: 10,
    surface_form: '雨',
    pos: '名詞',
    pos_detail_1: '一般',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: '雨',
    reading: 'アメ',
    pronunciation: 'アメ' },
  { word_id: 92920,
    word_type: 'KNOWN',
    word_position: 11,
    surface_form: 'が',
    pos: '助詞',
    pos_detail_1: '格助詞',
    pos_detail_2: '一般',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: 'が',
    reading: 'ガ',
    pronunciation: 'ガ' },
  { word_id: 2637510,
    word_type: 'KNOWN',
    word_position: 12,
    surface_form: '降る',
    pos: '動詞',
    pos_detail_1: '自立',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '五段・ラ行',
    conjugated_form: '基本形',
    basic_form: '降る',
    reading: 'フル',
    pronunciation: 'フル' } ]

かなり詳しい形で解析されているような気がしないでもない。
問題は、これをどう使うかでしょうね。

今後の予定

おそらく、これの解析結果は、コンパイラで言うところの字句解析でしょう。
これを文章解析まで持っていきたいと思っている。

なので、次は、解析した結果をもとに、構文木の構築を考えてみる。

最終的にしたいのは、文章の類似比較。
それができれば、本当にやりたいことができる。
シコシコ、構文木作成の情報収集をしますか。。。

周辺知識

形態素 - Wikipedia

参考サイト

kuromoji.js を使って形態素解析 - zeny.io

次の目標