見出し画像

【ゆるプロ!番外編】文字列で使われている文字を走査する


情報Ⅱの教科書で興味をもったページや、知らなかった内容などを取り組んでいくことにする。今回より自分なり(独自)の視点で何回か取り組んでみようと思う

今回はキーボードの配列を研究しよう(東京書籍、情報Ⅱのp37)についてお行う。テーマとしてはキーボードの配列を研究しようとなっているが、使用されている文字数のカウントに興味をもった。昔、「あなたの今年の一文字は⚫︎⚫︎です」とか、何かのSNSであったよね。

とりあえず、下記文章をクラシックにpythonで走査してみる。特にアルゴリズムとかは考えてないからね。それは次回以降にするのかは検討したい

対象

対象の文字列に関しては、Google Pixel7のGoogle lensで教科書の例題テキストをスキャンして文字起こしをしたものを走査の対象として使わせてもらう。Google Pixel7から写真の文字をデジタルに変換できるのは便利だね。コンピュータで原稿は作っているだろうから読みやすいのはあるだろうけど・・・

原文)
It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way--in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only.

東京書籍、情報Ⅱ(P37)

ちなみに和訳するとこんな感じ

和訳)
それは最高の時代であり、最悪の時代であり、知恵の時代であり、愚かさの時代であり、信仰の時代であり、不信の時代であり、光の季節でした。それは暗闇の季節でした、それは希望の春でした、それは絶望の冬でした、私たちは目の前にすべてを持っていました、私たちの前には何もありませんでした、私たちは皆天国にまっすぐに行きました、そして私たちは皆反対方向にまっすぐに行きました--要するに、この時代は現代とあまりにも似ており、最もうるさい権威者の一部は、良くも悪くも、この時代を最上級の比較においてのみ受け入れようと主張した。

Google Pixel7による翻訳結果

設計

設計は詳細設計と基本設計の間くらいのイメージ、実際にしたいこと(行動、処理)ベースで書いている

そもそも、何でこんなことをしたのか、テキストでは手動(目視)で使用されている文字を数えることも検討されているが、とても時間が掛かるのでそんなことはしたくない。後は単純に自分の目視は信用していない。絶対、後で数え間違えるし、自分の脳への負担も大きいだろう。そこで、長い時間を掛けたくないのでプログラムを書いて短く終わらせる。授業であれば時間も十分にあるだろうしいいとは思うんだけどね。ただ、教科書に書かれているテーマについて考える方に時間を充てた方が有益かと。コードはあくまで手段でしかないからだ

実装

設計に基づいて作成したコードは以下の通り。設計時点ではイメージが出来ておらず実装で抜けていることが判明したりする。そのときは適宜、修正している。しかし、大まかな流れとしては設計の通りだ

また、#debugとあるのは、想定した結果が表示されなかったために使用した形跡を残してある

# アルファベットの配列(一覧)
alphabet=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]

# 走査対象 
string="""
It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way--in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only.
"""

# 結果を格納する辞書を用意する
alphabet_dictionary={}

# 文字列を小文字に変換する
string_lower=string.lower()

# とカウンターを準備する
count=0

for character_a in alphabet:
    # print(character_a) # debug
    for character_s in string_lower:
        #print(character_s) # debug
        if character_a == character_s:
            count = count + 1
    # alphabetの1文字毎に走査が終わったら結果を辞書に格納する
    alphabet_dictionary[character_a]=count
    count=0

# print(alphabet_dictionary) # debug

# 結果の表示
for alphabet_dictionary_key in alphabet_dictionary:
    print(alphabet_dictionary_key + ": " +  str(alphabet_dictionary[alphabet_dictionary_key]))

結果

それぞれのアルファベット毎に使用されている文字数が表示されて分かりやすい

a: 28
b: 5
c: 7
d: 14
e: 69
f: 19
g: 13
h: 28
i: 45
j: 0
k: 2
l: 12
m: 5
n: 22
o: 44
p: 10
q: 0
r: 27
s: 42
t: 48
u: 5
v: 5
w: 21
x: 0
y: 4
z: 0

課題

英語はアルファベット26文字で構成されるから走査回数が少なくて済むが和文だったら大変だ。どうやって和文を走査するのかも検討していきたい。例えば、和文の文字を先に分解するとか検討できるかと

展望

教科書はクラスタリングについてもテキストは言及があるので、ちょっとずつ読み進めていく

応用

自分のnoteはどんな単語が多いのだろうか分析するきっかけになるか?また、他のユーザーはどうするのか?スクレイピングは可能なのか?とりあえず、自分のnoteはダウンロード出来そうなので活用を検討する。要はトレンドを知るきっかけになったり、要素的に重要なことが分かったりするのではないかという期待感がある。でも、そこら辺は既にnoteの会社がやってそうだ。後はニーズ(書き手が興味を抱いていること)を知るきっかけになりそうだけど、体感上、意図的にトレンドだからコピーするだけの記事になるのであれば、書き手にとってのニーズとは決めにくい気もする

意見

ただ、驚き屋は騒ぐだけではなく、騒いだ人自身が騒いだ内容を活用して自分の問題について取り組んだ結果(事例)、解決した事例を示してほしい。

上記を参考にしたい気持ちを自分は持っている。形の伴わない、結果のない口だけの発言は無意味だと思っているからだ(結果を求めているときほどそう思うから、期待を裏切られたときのガッカリ感は強い)

実際に100%の結果を得ることは難しいとは思っているし、毎回、結果が伴うとも思っていない。しかし、そういったリアリティのある文が読みたい。何はいけたけど、何はいけなかったとか、3回に1回は期待した結果が出なかったとか。完全な結果は出なかったけど、そのクオリティは妥協できそうかなど、フラットな回答があることで温度感を知ることが出来るのが良いのだ

どうしても発言した内容が完璧なアウトプットが出ないようならば、自分が価値を感じずに避ける傾向にはあるので一概には言えないが、期待結果に近づけないクオリティならば、何をしたらクオリティが上昇したかなど、実際に自分の問題をクリアするために解消した工夫とか載せるのも非常に価値があると思う。どうしても自分はGoogle検索で答えを探してしまうため、その行為が良くはないのだが。要はそういった体験を通してリアルな感想というのは構築されていくのではないか

というのは、

情報の教科書について騒いでいた人たちは実際に取り組んだですかね?騒ぐのが仕事なのかもしれないけど、それの影響(弊害リスク)を受ける人たちのことも考えてほしいところ。実際に買ったら後は知りませんって感は出したくない(俺は何と戦っているんだ。。。)

責任の範囲を発言に留めるのも手ではあるが、多少、気持ちだけでもいいので自分にとっては良かったとかあるだけでも示してくれるだけでも、理解しやすくなるんだ

注意

情報Ⅱのテキストについて、自分の回答を参考にするのは良いが、あくまで自分の課題や考えている中で取り組んでいるに過ぎない。人は、それぞれ目的を持っておりGoalに辿り着くための経路というのはいくつあっていいと思うので、解のひとつと捉えて貰えれば

転用

情報Ⅱのテキストを勉強すれば、仕事をゲットできるか?プログラマになれるかは別の話だと分けて考えた方がいい。ただ、自分が仕事をする前に学んでおきたかったことはいくつか書かれており、要素として知っておく分にはいいかと。技術を学べばプロになれるかという問いは直接的に紐づく話ではない。どちらかといえばプロというのは営利を目的としているのだから、技術は使うものであって、その前の重要な段階があると思っている。会社だと営業さんがいれば売りの部分は担当してくれるから、その上でクライアントが望む技術を保持するために勉強するってのはありだとは思うが極めて果てしない。自分に出来ることは常に限りあるからだ・・・。自分で売上を上げられる見込みがあるからコードを安心して打てると考えた方が良いかと。要はどんなに勉強してもお金に変えられなければ仕事には転用できていないからプロにはなれていない。仕事の点では残念ながら学びが無駄になるってことは有り得る。プロになれないことが悪いとは言っていないよ。学んだこと自体も悪いことではない。ただ、結果を求めたタイミングで最初の問いはNoというだ。議論する先(組み合わせ)が違う

まあ、でも雇用としては人財として採用するかは各社が決めることだし、判断を委ねるのもひとつの手だ。応えられないときの苦労は大変だけど。新卒ならば研修はしてくれるだろうし、ある程度、やってみての判断も一つの手だろう

しかし、よく思うのは学校があなたの売上を上げることは恐らく保証してくれないだろうってこと。教えるのが仕事であって、そこまでは知らんって感じだと思う。本当、難しいね。保証しようにも大半が事務方であり、自分で売上(実際の利益)を上げるわけではないから教えようがないと言った方が正しいかと。ただし、サービスの品質によって満足度が上がり利益に繋がっているとは考えられるが、実際に1人でやるのは相当に難しいと実感している。逆にそこまで引き上げた功労者がいるわけだ。総合力とも考えられるが。大学や高校の場合は公的に認められている学位という箔により、就職課等の支援を受けて就職をしていける点では新卒のカードの意味は大きい。一番難しいのは、中途採用で、どのようにアプローチをしていくかが難しい。

本当にこの問題は難しい

参考

参考にしたテキストのリンクを載せておく

配列や辞書など、使い方をよく忘れるので辞書のように使用した
また、for文の使い方(辞書の展開の仕方)もC言語とごっちゃにすることが多いので調べ直すことが多い

オフィシャル

比較的、わかりやすい

[] と、()と、{}がよく分からなくなるので調べた

[]はリスト
()はタプル
{}は辞書

ざっくり進めたいときは、複合して理解を明らかにしていくと進めやすい

おわり!