単語数

単語数

上級

はじめに

高校生に、外国語として英語を教えています。

カリキュラム全体をテレビ番組を題材にして組み立てることにしました。 どの単語が使われているのか、そしてどれくらいの頻度で繰り返されるのかを分析する必要があります。

そうすれば、まずは最もやさしい番組を選び、時間の経過とともに少しずつ難易度を上げていくことができます。

説明

この課題の目的は、ドラマの字幕の中で各単語が何回登場するかを数えることです。

これらのドラマの字幕には、ASCII文字しか使われていません。

登場人物はよく、they're や it's のような短縮形を使って、くだけた英語で話します。こうした短縮形は2つの単語(たとえば、we are)からできていますが、短縮形(we're)は1つの単語とみなされます。

単語は、あらゆる種類の句読点(たとえば、":"、"!"、"?")や空白文字(たとえば、"\t"、"\n"、" ")で区切られます。単語を区切らない唯一の句読点は、短縮形の中のアポストロフィです。

数値も単語として扱われます。字幕に It costs 100 dollars. とあるなら、100 がそれだけで1つの単語になります。

単語は大文字と小文字を区別しません。たとえば、you という単語は次の文に3回登場します。

You come back, you hear me? DO YOU HEAR ME?

結果の中で単語の数を並べる順番は問いません。

ここまでに挙げた要素をいくつか取り入れた例がこちらです。

  • 単純な単語
  • 短縮形
  • 数値
  • 大文字と小文字を区別しない単語
  • 単語を区切る句読点(アポストロフィを含む)
  • 単語を区切るさまざまな空白文字

"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled.

この字幕の集計結果は、次のようになります。

123: 1
agent: 1
cried: 1
fled: 1
i: 1
password: 2
so: 1
special: 1
that's: 1
the: 2

result列には、JSONでエンコードされたオブジェクトのオブジェクトを格納します。各単語がキーで、カウントが整数値です。

たとえば、上の文を考えてみましょう:"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled. この入力に対するresultは、次のようになります:

{"123":1,"agent":1,"cried":1,"fled":1,"i":1,"password":2,"so":1,"special":1,"that's":1,"the":2}

テーブルスキーマ

CREATE TABLE "word-count" (
    sentence TEXT NOT NULL,
    result   TEXT               -- json object
);

JSONドキュメント

JSON関数と演算子


出典

古典的な定番の問題ですが、Go Tourで見かけたことで思い出しました。
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
SQLite Exercism

単語数を始める準備はできましたか?

Exercismに登録すれば、81個の演習、そして本物の人間によるメンタリングとともに、SQLiteを学んでマスターできます。すべて無料です。