[Python] Python + TreeTagger で英語の文に品詞アノテーションをする

前回の記事では、入力された英文を Python + TreeTagger で処理して、原形の情報を得ました。その過程で、入力された単語(そのままの形)と品詞の情報も得られますので、今回はそれらを使って、品詞アノテーションをします。

イメージとしては:

入力:"He has lots of books."
      ↓↓↓
出力:He_PP has_VHZ lots_NNS of_IN books_NNS ._SENT

それぞれの単語の後ろに、アンダーバー(_)と、品詞情報(PP, VHZなど)がくっついています。このように品詞情報を付与してコーパスを作成すると、より高度な検索などがしやすくなるようです。

line に入っている文が処理されますので、ダブルクオーテーションマークの中の文を分析したい文に変えてください。また、input() やコマンドライン引数を使うことで、より簡単に扱うこともできそうです。

なお、POS (品詞) がそれぞれどういう意味であるかは、TreeTaggerのページにある "tagset documentation" をクリックすることで確認することができます。

関連

[Python] Python + TreeTagger で英語の文の原形を得る

TreeTagger を Python で動かして、原形を得ます。

下のコードでは、例として "He has lots of books, and I have as many books." という文を処理しています。アウトプットとして、['he', 'have', 'lot', 'of', 'book', ',', 'and', 'I', 'have', 'as', 'many', 'book', '.'] と返ってきます。

なお、10行目の "line" に処理をする文を格納していますが、input()を使ったり、コマンドライン引数を使ったりすると、使い勝手も向上しそうです。

関連

[Mac][Excel] 数式を値に、値を数式に変換する (イコールを取ったり、つけたりする) マクロ Excel for Mac

USBにあるエクセルファイルのデータを参照して、PCにあるエクセルファイルで作業する機会があった。というのは、USBのエクセルファイルには、自分のPCに置いておきたくないような情報が入っていたので、そのファイルをPCに移してしまうことはせずに、PCのエクセルファイルからデータを読み出し、そのPC上のエクセルファイルで作業を進めたのだ。

イメージとしてはこのような感じ:

エクセルファイル2 をPCにコピーしたくなかったので、エクセルファイル1 で参照して作業

もうすこし具体的には、エクセルファイル1 (PC上のファイル) で

='/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地
という数式を入力して、PC上でUSB内のエクセルデータの値を参照していた。

想定としては、USBを抜いてしまえば、PCのファイルからは参照されたデータが見えなくなってしまうと思っていたのだが、そうでもなさそう。エクセルファイル1 を開いた際に、リンクを更新しなければ、エクセルファイル2 のデータが見えてしまう (ようだ)。

"更新しない" をクリックすると、USBのデータが見えてしまう (みたい)

USBのデータがPCから見えてしまうのを避けたい。ということで、解決策として、上記の数式を値にしてしまうマクロ、つまりイコールを取ってしまうマクロを書いてみた。イコールを取られた値に対して実行すると、またイコールが付与された数式になります。次のようなイメージ:

='/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地
↓↑
'/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地

*変換したい範囲を選択してから実行します。

[Mac][Excel] Excel for Mac 2016 でマクロを使って、ショートカットキーのユーザー設定の代用にする

諸事情あり Excel for Mac 2016 を使っているが、どうやら、2011版と違い、ショートカットキーのユーザー設定ができない (ようだ)。困った。

ただ、いろいろなボタンを押してもがいていると、マクロにはショートカットキーを当てられるとわかったので、これで代用している。ということで、しばしば使う命令をマクロで書いてみた。下の方にスクリプトを載せておきましたので、もしも役に立つ方がいらっしゃったら、ぜひご利用ください。


  • *なお、スクリプトは、「個人用マクロブック」に保存します。そうすると、どのファイルにおいても、上記のコマンドを利用することができます。個人用マクロブックの作成方法などについては All About のこちらの記事 が分かりやすいです。

  • *スクリプトを書いたら、[ツール/マクロ.../オプション...] をクリックします。そうすると、ショートカットキーを設定できます。

  • MyHeight・・・行の高さを変更
  • MyMerge・・・セルの結合/結合を解除
  • MyPrintAreaSetUp・・・選択された部分を印刷範囲として設定
  • MyCenter・・・選択範囲で文字列を中央ぞろえ




[R] R の hist() でのヒストグラムに、各階級の度数を書き入れる #2

前回の記事では、hist() を使って描いたヒストグラムに、各階級の度数を書き入れました。

ただ、毎回スクリプトを書いているのは面倒なので(?)、上記機能を組み入れたりして hist() を拡張した myhist() を作りました。

基本的には自分用なので、平均点を表す線を引いたりするのも入れてあります。もしもお役に立ちそうでしたらご自由にお使いください。



[R] R の hist() でのヒストグラムに、各階級の度数を書き入れる

やりたいこと:

R で hist() を使って、ヒストグラムを描き、
加えて、各階級の度数を表示する。
つまり、次のような感じ:


なお、データは Rに入っている iris を利用する。

1. やり方

irisの1列目のデータを利用する。今回は、わかりやすさのために、変数d に iris[,1] を代入しておく。つまり、変数d に分析したいデータ (ベクトル) が入っているものとする。ではズバリ、次のように書く:



2. 仕組み

変数infoの中には、次の通り、ヒストグラムを描くための情報が入っている (info で出てくる):

このうち、今回関連のある情報は:
  • $counts が度数
  • $mids が階級値 (階級の真ん中の値)
ですので、
  • x座標 = info$mids
  • y座標 = 1 (この値は任意)
の位置に info$counts を書き入れる (text()) 、ということ。

なお、y座標はお好みで。下にいくつか例をあげておく。

y=info$counts-1


y=info$counts+0.5


y=info$counts/2


  • hist() を拡張した myhist()はコチラ


[Mac] [Excel] Excel for Mac 2011 でガントチャート #6

エクセル (Excel) で作るガントチャート、第6回目です。過去記事はこちら:

  1. [Mac] [Excel] Excel for Mac 2011 でガントチャート #1
  2. 1つのタスクの開始日から終了日までを色づけする
  3. [Mac] [Excel] Excel for Mac 2011 でガントチャート #2
  4. 複数のタスクの開始日から終了日までを色づけする
  5. [Mac] [Excel] Excel for Mac 2011 でガントチャート #3
  6. 年、月、日、曜日を表示する
  7. [Mac] [Excel] Excel for Mac 2011 でガントチャート #4
  8. 「初日 (基準となる日)」から相対的なやり方で表示する
  9. [Mac] [Excel] Excel for Mac 2011 でガントチャート #5
  10. ガントチャートの日付 (初日) を変更しやすくする」


前回はガントチャートの日付 (初日) を変更しやすくするように変更を加えました。今回は:

「タスク名称 (大・中・小) を書き入れるスペースを作る」
のを目標にします。

出来上がりは次のような感じ:


タスク名称は、大項目・中項目・小項目の3つに分けて書き入れられるようにしてみます。中・小項目がインデントされているように表示させましょう。また、コミュニケーション際の便宜のために、タスクに番号 (No.) を振れるようにしておきましょう。

まずは、列Aを選択してから右クリックし、挿入。合計4列分、挿入します。各列を適当な幅に調整します。A列は1.23cm、B・C列は0.6cm、D列は3.49cmにしてあります。
幅は任意ですが、B・Cは狭く、Dは広くしておく


B列に大項目、C列に中項目、D列に小項目を書き入れていくと、中・小項目がインデントされたように見えて、わかりやすいと思います。
(もしも文字列がずれてしまう場合は、「左揃え」にします)

最後に、「タスク名称」のタイトルをB4セルに入力します。この入力された「タスク名称」をB–Dのセルの中央に表示したいのですが、やり方は2つあり、好みの問題になります。
  1. B4–D4セルを「セル結合 (セルを結合し中央揃え)」
  2. B4–D4セルを選択し「セルの書式設定」から横位置を「選択範囲内で中央」
セルの結合は後々で諸所の作業がやりづらくなりがちですので、今回は2つ目のやり方にしておきます。


これで出来上がり。

なお、G5セルを選択して、ウィンドウ枠の固定をしておくと、枠がずれないので便利かもしれません。


[Mac] [Excel] Excel for Mac 2011 でガントチャート #5

エクセル (Excel) で作るガントチャート、第5回目です。過去記事はこちら:

  1. [Mac] [Excel] Excel for Mac 2011 でガントチャート #1
  2. 1つのタスクの開始日から終了日までを色づけする
  3. [Mac] [Excel] Excel for Mac 2011 でガントチャート #2
  4. 複数のタスクの開始日から終了日までを色づけする
  5. [Mac] [Excel] Excel for Mac 2011 でガントチャート #3
  6. 年、月、日、曜日を表示する
  7. [Mac] [Excel] Excel for Mac 2011 でガントチャート #4
  8. 「初日 (基準となる日)」から相対的なやり方で表示する


前回は日付を「初日 (基準となる日)」から相対的なやり方で表示するように変更を加えました。今回は、その相対性を活用すべく:

「ガントチャートの日付 (初日) を変更しやすくする」
のを目標にします。まずは現在の状況を確認しておきましょう。現在はC4セルにだけベタ打ちされた絶対的な日付が入力されており (「2016/11/23」) それ以外のセルは、そのC4のセルの日付を利用して値が表示されています。
C4セルにのみデータのベタ打ち、それ以外はC4セルから相対的に決まる


ということですので、C4セルの値を変更すればすべての日付が自動的に変更されます。

ただ、問題があります。C4セルが2つの役割を担ってしまっています:

  1. ベタ打ちされた「年/月/日」データであり、チャートに表示される初日を決める
  2. 「年/月/日」を具体的に備えた値であるが、「曜日」として表示する
このことによって、初日がわかりづらくなったり、また、時間が経つとC4セルにベタ打ちされた日付によって他の日付も相対的に決定されるということを忘れてしまうかもしれません。是非foolproofにしたいので、1つ目の役割を他のセルに担わせます。

ということで、B2セルに「年/月/日」データをベタ打ちするようにしましょう。そして、そのベタ打ちされたデータをC4セルが参照する、という形にします。では、B2セルに日付を入力し、C4セルに「=B2」と入力します (試しにB2セルには「2016/12/1」と入力しました)

このことによってfoolproof-nessが向上します。初日を変更したい場合は今のB2セルに具体的な日付を入力します。

次はこちら --> [Mac] [Excel] Excel for Mac 2011 でガントチャート #6





[Mac] [Excel] Excel for Mac 2011 でガントチャート #4

エクセル (Excel) で作るガントチャート、第4回目です。過去記事はこちら:

  1. [Mac] [Excel] Excel for Mac 2011 でガントチャート #1
  2. [Mac] [Excel] Excel for Mac 2011 でガントチャート #2
  3. [Mac] [Excel] Excel for Mac 2011 でガントチャート #3


前回は枠組みに関して作業を進めました。1行で表示されていた日付を「年、月、日、曜日」というように4つの要素にバラしました。今回は、少しだけ作業を進めましょう。

「初日 (基準となる日)」から相対的なやり方で表示する
のを目標にします。これまでは「2016/11/23」「2016/11/24」「2016/11/25」...というように絶対的に日付を入力していきました。今回からは「2016/11/23 (初日)」を絶対的に入力したら、「2016/11/24 (初日から1日後)」「2016/11/25 (その日から1日後)」というように初日から1日ずつずらしていく、というやり方で日付を表示します。前回と見た目は変わりませんが、後々になって便利さが増します。

C4セルが初日です (2016/11/23)。その隣のセル (D4) に「=C4+1」と入力します。



そうしたら、D1からD4セルを選択し、右下を横にビーっとドラッグして必要な日数分伸ばしていけば終了です。
見た目は変わりませんが、初日から1日ずつずれた日にちということで曜日が表示されます。

なお、横にドラッグして適当な日数分の枠を作って何ら問題がありませんが、マクロを使って枠を作ることも可能です。今、仮に100日分のマスを追加したいと考えたとします (約3か月)。[ツール->マクロ->Visual Basic Editor] をクリックし、[挿入->標準モジュール] をクリックします。

[ツール->マクロ->Visual Basic Editor]↓↓↓
[挿入->標準モジュール]


ウィンドウが出てくるので、次の文字列を入力 (コピペ) します。
Sub test()
Dim yoko As Integer
yoko = 100

Range("D1:D4").Select
Selection.AutoFill Destination:=Range(Selection, Selection.Offset(0, yoko)), Type:=xlFillDefault
End Sub
それから、再生ボタン (または Fn + F5) を押すと、100日分横にビーっとドラッグしたのと同じことが起きています。
再生ボタン (Fn + F5) を押すと↓↓↓


なお、上にスクリプトの3行目「yoko = 100」の「100」を「200」にすれば200日分追加されますし、「30」にすれば30日分追加されます。作成したいガントチャートにはどれくらいの作業日程が必要かを考えて、適当な値を入力します。

最後に列の幅を調整して、出来上がりです。



次はこちら --> [Mac] [Excel] Excel for Mac 2011 でガントチャート #5



[Mac] [Excel] Excel for Mac 2011 でガントチャート #3

エクセル (Excel) で作るガントチャート、第3回目です。過去記事はこちら:

  1. [Mac] [Excel] Excel for Mac 2011 でガントチャート #1
  2. [Mac] [Excel] Excel for Mac 2011 でガントチャート #2


前回は「複数のタスクの開始日から終了日までを色づけ」しました。ガントチャートの肝である色づけが終わったので、これからは、枠組みを作りこんでいきましょう。ということで今回は

年、月、日、曜日を表示する
のを目標にします。出来上がりは次のような感じ:


前回まで一行に「2016/11/23」のように表示していた部分を、「年、月、日、曜日」の4つの要素にバラしていきます。

まず、4つの要素を縦に並べるため、3行分の空欄を作りましょう。A1のセルを選択し、[挿入->行]をクリックします。空欄の行が挿入され、全体が一つ下に下がります。これをもう2回繰り返します。
この作業を合計3回行う


次に、C1, C2, C3 各セルに「=C4」と入力します。そうすると、C1からC4のセルまで全てのセルに「2016/11/23」と表示されます。
C1からC3まで全てに「=C4」と入力すると、全てのセルに「2016/11/23」と表示される


ここから、それぞれのセルに異なる作業をします。まず一番上のC1セルを選択し、セルの書式設定 (Command + 1) を開きます。[表示形式->ユーザー定義]から、種類に「yyy」と入力し、OKをクリック。そうすると、C1のセルの表示が「2016」になります (年 year が表示される)。
種類に「yyy」で年


次はC2セルを選択し、セルの書式設定。今度は種類に「m」と入力し、OKをクリックすると、C2のセルの表示が「11」になります (月 month が表示される)。
種類に「m」で月


同様に、C3セルでは「d」、C4セルでは「aaa」と入力すると、それぞれ日付と曜日が表示されます。
種類に「d」で日付
種類に「aaa」で曜日


あとはこれを横に広げていきます。C1からC4のセルを選択し、右下のポチを右側にドラッグしていきます。今回は列Mまで伸ばしてみました (もちろんもっと伸ばせます)。
(例えば)列Mまでドラッグすると... ↓↓↓


このままでも良いのですが、「2016 (年)」と「11 (月)」が少しうるさいです。毎日ではなくて、毎月1日だけに表示されるようにしてみましょう。C2セルを選択し、
=IF(DAY(C4)=1, C4, "")
と入力します。C1にも全く同じ式を入力します。そうしたら、C1とC2セルを選択し、また右側までビーっと伸ばしていきます。そうすると、「2016/12/1」のところだけ、「2016」「12」が表示され、それ以外のところでは年も月も表示されません。
列Kは1日なので、そこだけに「2016」と「12」が表示される


現状ではセルの幅が広すぎるので、狭くしていきましょう。列Cから列Mまでを選択し適当な列の境界をダブルクリックします。そうすると、自動的に列の幅が最小になります。
すると...↓↓↓
各列幅が最小化された


「2016」が入力されている列だけ少し幅広なので、他の列もここと同じ幅にしましょう。K列を選択し、右クリックし、[列の幅...]選択し、表示される列の幅をコピー (Command + c) します。キャンセルしてから、次に、列Cから列Mまでを選択し、右クリック、[列の幅...]をクリックし、Command + v で貼り付け、OK。そうすると、列の幅が揃い、綺麗に見えます。


折角なので、Command + e で文字列を中央に表示させておきましょう。これで出来上がり。だんだんそれらしくなってきました。

次はこちら --> [Mac] [Excel] Excel for Mac 2011 でガントチャート #4



[Mac] [Excel] Excel for Mac 2011 でガントチャート #2

エクセル (Excel) で作るガントチャート、第2回目です。過去記事はこちら:

  1. [Mac] [Excel] Excel for Mac 2011 でガントチャート #1


前回は「1つのタスクの開始日から終了日までを色づけ」しました。今回は、

複数のタスクの開始日から終了日までを色づけする
のを目標にします。出来上がりは次のような感じ:
△出来上がりイメージ

11/23~24, 11/23~26, 11/25~27 の3つのタスクについて色づけがされています。


1. 準備 (枠組み)


まずは前回同様、枠組みをつくります。開始、終了の下にそれぞれ日付を入力していきます。「月、日」だけでなく「年、月、日」を入力します。表示される形式はお好みでどうぞ。


2. 色つけ


では、色つけに移りましょう。まずは、C2 から H2 までのセルを選択します。それから [条件付き書式 -> ルールの管理] へと進みます。それから [ルールの編集] をクリックします。
△まずは範囲を選択してから、[条件付き書式 -> ルールの管理]

△ルールの編集をクリック

そうしたら、前回入力した数式が残っていますね:
=AND($A2 <= C1, C1 <= $B2)
C1 が2つありますので、両方の C と 1 の間にドルマーク ($) を入力します:
=AND($A2 <= C$1, C$1 <= $B2)
△Cの後ろ、1の前にドルマークを入れる x 2

それからOK。1つ前の画面に戻ります。最後に、「適用先」という部分を変更します。一番最後が ...$H$2 となっていますが、その 2 を 4にします:
Sheet1!$C$2:$H$2 ---> Sheet1!$C$2:$H$4
それからOK。出来上がりです。
Voilá!

もちろん、ピンク色以外に色を塗ることもできます。

次はこちら --> [Mac] [Excel] Excel for Mac 2011 でガントチャート #3


[Car] クイック板金(2回目)

車のバンパーを擦ってしまった。。。ということで、 イエローハットのクイック板金 にお願いしていました。別の店舗に持って行っての作業ということで数日かかりましたが、無事に車が帰ってきました。結果、とても綺麗に直してもらい、非常に満足しています。板金をしたと言われても、素人目にはわか...