Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

文章を与えて登場回数の多い文字(文字コード)ベスト10を返す(言語間の比較をする)

文章を与えて登場回数の多い文字(および文字コード)と登場回数を返します。言語ごとに頻出文字が異なるのであれば言語判定に用いことができます。日本語、韓国語、 中国語、英語、スペイン語、フランス語について各国語の文章を与えて分析します。

関連記事

文字列にアルファベットがそれぞれ何個含まれているか数える

使ったメソッド・関数
  • ord() : 文字を文字コードに変換
  • chr() : 文字コードを文字に変換
  • collections.Counter() : リスト・タプルを渡すと要素と出現回数からなるcounterオブジェクトを生成する。
環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
コード

日本語版wikipediaの「食事」の項からいくつかの文章を変数sentenceの中身としてコピぺしています。

import collections

# 分析する文章
sentence='食事と呼ばれる他の用法では、会席料理において「止め肴」のあとに続いて、「止め椀」や「香の物」とともに出される御飯物を指す。日々の暮らしの中でも、食事に関する事柄全般を指して「食生活」と呼ばれる。くだけた表現で飯(めし)といい、「生きていく」ことを比喩的に表す言葉に「飯を食う」がある。「~で飯を食う」は「仕事で生計を立てる」こと、家族を扶養することを「食べさせてやる」という言い方で表現する。「衣食住」の食のことで、食べ物を食べる形が一般的である。生命維持に欠かせない栄養素を摂取するためだけではなく、家族や仲間と一緒に「満たされた時間」を和やかにすごすため、「分かち合い」を実感するため、味を楽しむため、料理を作ってくれた人(家族や親類)の愛を実感するためといった、様々な目的や意味を込めつつ、ヒトは食事をする。「同じ釜の飯を食う」という慣用句にみられるように、複数の参加者が同時に、あるいは同じものを食べる行為は、共同体としての帰属意識を持ったり、強化したりする意味合いがある。食事の席に誰かを招待するのは、儀礼の意味もある。食費を参加者の一部メンバーが肩代わりすることで、上下間や男女間の関係の確認が行われていることもある。自作の手料理を食べてもらうということで特別な関係を意味づける場合もある。'

# 一文字ずつ取得し文字コードに変換
list_code=[]
for letter in sentence:
    list_code.append(ord(letter))

# list_codeのカウント結果を登場回数の多い順に10個取得
code_count = collections.Counter(list_code)
list_best=code_count.most_common(10)
#print(list_best)

# 文字コード、登場回数、コードを変換した文字を表示
for code in list_best:
    character = chr(code[0])
    print(code[0],code[1],character)
実行結果

る、を、と の順に出現回数が多いようです。

12427 27 る
12434 24 を
12392 19 と
12398 19 の
12289 18 、
39135 16 食
12356 15 い
12377 14 す
12395 13 に
12300 13 「


コード

韓国語版wikipediaの「食事」の項からいくつかの文章を変数sentenceの中身としてコピぺしています。

import collections

# 分析する文章
sentence='아침은 사람이 아침에 일어나 한 두 시간 안에 먹는 것이 보통이다.점심은 낮에 먹는 식사로, 아침보다 더 많이 먹는 것이 보통이다. 아침을 먹지 않고 점심으로 아침까지 때울 수 있으며, 아점으로 줄여 부르기도 한다.저녁은 늦은 오후나 저녁 아무 때나 먹는 식사이며 하루의 주된 식사에 해당한다.서구의 경우 오늘에 이르기까지 다음과 같은 내용의 식생활의 변화를 경험하여 왔다. 실질소득수준이 상승함에 따라서 식료소비의 구성은 용량이 많고 별로 맛이 없는 곡류나 감자류로부터 축산품·과실·아채 등보다 더 맛이 풍부하고 질이 높은 식료로 기호가 바뀌었다. 이러한 경향을 식생활의 고도화라고 한다. 대한민국에 있어서 식료품 구성이 식물성 식품에서 동물성 식품으로 구조가 바뀌는 경향과 일치한다.'
# 一文字ずつ取得し文字コードに変換
list_code=[]
for letter in sentence:
    list_code.append(ord(letter))

# list_codeのカウント結果を登場回数の多い順に10個取得
code_count = collections.Counter(list_code)
list_best=code_count.most_common(10)
#print(list_best)

# 文字コード、登場回数、コードを変換した文字を表示
for code in list_best:
    character = chr(code[0])
    print(code[0],code[1],character)
実行結果

最も多いのは半角スペースでした。韓国語は読みやすいように文章の所どころにスペースを入れるようです。続いて意味は分かりませんが 이、다、식 の順です。

32 91
51060 15 이
45796 11 다
49885 11 식
50500 8 아
50640 8 에
46 8 .
51008 7 은
54620 7 한
47196 7 로


コード

中国語版wikipediaの「食事」の項からいくつかの文章を変数sentenceの中身としてコピぺしています。

import collections

# 分析する文章
sentence='餐,或称饭、餐饭、餐點、膳、膳食,指人在一定时间内吃进的食物。吃饭地点通常会在家、饭馆、食堂或任何地方。做饭工具称作厨具,常见的有锅、炉、烤箱等。两餐和三餐,是常见的进餐次数。在中国等地,一天之内通常会进餐三次:即早饭、午饭、晚饭。有认为,自先秦时代起,中国民众普遍实行两餐制。到宋朝时,城市宵禁制度解除后,带来了市场繁荣,推动了三餐制的普及餐可以在任何時間和位置進行,這是因為地區的不同而有所差異。早餐通常一個人在早上醒來所吃的小食。晚餐則是在晚上吃的一頓飯之前。下午茶是一個午後餐,通常吃比較清淡的食物,如三明治和蛋糕。'
# 一文字ずつ取得し文字コードに変換
list_code=[]
for letter in sentence:
    list_code.append(ord(letter))

# list_codeのカウント結果を登場回数の多い順に10個取得
code_count = collections.Counter(list_code)
list_best=code_count.most_common(10)
#print(list_best)

# 文字コード、登場回数、コードを変換した文字を表示
for code in list_best:
    character = chr(code[0])
    print(code[0],code[1],character)
実行結果

最も多いのは 餐 でした。これは文章が食事に関連しているためと思われます。あとは区切り文字が続きます。

39184 13 餐
65292 13 ,
12289 10 、
12290 10 。
39277 8 饭
30340 8 的
22312 6 在
24120 6 常
39135 5 食
19968 5 一


コード

英語版wikipediaの「食事」の項からいくつかの文章を変数sentenceの中身としてコピぺしています。

import collections

# 分析する文章
sentence="For powder made by grinding grain, see flour. A meal is an eating occasion that takes place at a certain time and includes prepared food.The names used for specific meals in English vary, depending on the speakers culture, the time of day, or the size of the meal.Meals occur primarily at homes, restaurants, and cafeterias, but may occur anywhere. Regular meals occur on a daily basis, typically several times a day. Special meals are usually held in conjunction with such occasions as birthdays, weddings, anniversaries, and holidays. A meal is different from a snack in that meals are generally larger, more varied, and more filling than snacks.The type of meal served or eaten at any given time varies by custom and location. In most modern cultures, three main meals are eaten: in the morning, early afternoon, and evening. Further, the names of meals are often interchangeable by custom as well. Some serve dinner as the main meal at midday, with supper as the late afternoon/early evening meal; while others may call their midday meal lunch and their early evening meal supper. Except for breakfast, these names can vary from region to region or even from family to family."
# 一文字ずつ取得し文字コードに変換
list_code=[]
for letter in sentence:
    list_code.append(ord(letter))

# list_codeのカウント結果を登場回数の多い順に10個取得
code_count = collections.Counter(list_code)
list_best=code_count.most_common(10)
#print(list_best)

# 文字コード、登場回数、コードを変換した文字を表示
for code in list_best:
    character = chr(code[0])
    print(code[0],code[1],character)
実行結果

半角スペースが最も多く、e、a、nが続きます。

32 197
101 126 e
97 106 a
110 73 n
114 69 r
105 62 i
115 58 s
116 58 t
108 51 l
111 50 o


コード

スペイン語wikipediaの「食事」の項からいくつかの文章を変数sentenceの中身としてコピぺしています。

import collections

# 分析する文章
sentence="Estos tres fines no han de cumplirse simultáneamente para que una sustancia sea considerada alimento. Así, por ejemplo, las bebidas alcohólicas no tienen interés nutricional, pero sí tienen un interés fruitivo. Por ello, son consideradas alimento. Por el contrario, no se consideran alimentos las sustancias que no se ingieren o que, una vez ingeridas, alteran las funciones metabólicas del organismo. De esta manera, la goma de mascar, el tabaco, los medicamentos y demás drogas no se consideran alimentos. Sin embargo, hay que tener en cuenta que los alimentos contienen nutrientes y no-nutrientes, como la fibra vegetal, que aunque no proporcione a los humanos materia y energía, favorece el funcionamiento de la digestión.Los alimentos sanitarios son el objeto de estudio de diversas disciplinas científicas: la biología, y en especial la ciencia de la nutrición, estudia los mecanismos de digestión y metabolización de los alimentos, así como la eliminación de los desechos por parte de los organismos; la ecología estudia las cadenas alimentarias; la química de alimentos analiza la composición de los alimentos y los cambios químicos que experimentan cuando se les aplican procesos tecnológicos, y la tecnología de los alimentos que estudia la elaboración, producción y manejo de los productos alimenticios destinados al consumo humano."
# 一文字ずつ取得し文字コードに変換
list_code=[]
for letter in sentence:
    list_code.append(ord(letter))

# list_codeのカウント結果を登場回数の多い順に10個取得
code_count = collections.Counter(list_code)
list_best=code_count.most_common(10)
#print(list_best)

# 文字コード、登場回数、コードを変換した文字を表示
for code in list_best:
    character = chr(code[0])
    print(code[0],code[1],character)
実行結果

半角スペースが最も多く、e、a、oが続きます。英語と似た傾向ですがoの順位が高そうです。

32 203
101 130 e
97 118 a
111 103 o
110 101 n
115 100 s
105 93 i
108 68 l
116 57 t
99 53 c


コード

フランス語版wikipediaの「食事」の項からいくつかの文章を変数sentenceの中身としてコピぺしています。

import collections

# 分析する文章
sentence="Un repas est un ensemble de nourriture composée de divers mets et de boisson que l'on absorbe à des heures précises de la journée. Par extension, le repas est une action spécifique, consacrée à l'alimentation, qui entre dans le cycle des activités journalières. Il est souvent perçu comme un acte naturel car il répond à la satisfaction de besoins physiologiques essentiels. D'un point de vue sociologique et anthropologique, le repas n'est pas uniquement pensé comme un moyen de se rassasier, mais aussi comme une manière ritualisée de produire et entretenir du lien socialen témoigne la forte charge symbolique sociale, culturelle et/ou religieuse que contiennent les aliments dans les représentations humainesEn tant de nécessité vitale répondant à des impératifs chimiques et biologiques qui permettent la survie et la reconstitution des tissus biologiques, il est objet d'étude pour la diététique.Comme acte de commensalité, il appartient à la culture et relève de l'anthropologie, de l'ethnographie, de la sociologie, de la psychologie, de l'éducation, de l'enseignement, de la technique."
# 一文字ずつ取得し文字コードに変換
list_code=[]
for letter in sentence:
    list_code.append(ord(letter))

# list_codeのカウント結果を登場回数の多い順に10個取得
code_count = collections.Counter(list_code)
list_best=code_count.most_common(10)
#print(list_best)

# 文字コード、登場回数、コードを変換した文字を表示
for code in list_best:
    character = chr(code[0])
    print(code[0],code[1],character)
実行結果

半角スペースが最も多く、e、s、iが続きます。英語、スペイン語に比べるとaの順位が低めです。

32 164
101 142 e
115 75 s
105 74 i
116 68 t
110 66 n
111 60 o
97 53 a
108 53 l
117 48 u


各国の頻出文字ベスト5の文字コードを抜き出しました。各国のベスト5は異なっているので、これを使えば機械学習による言語識別ができる可能性があります。 ]

日本語 12427 12434 12392 12398 12289
韓国語 32 51060 45796 49885 50500
中国語 39184 65292 12289 12290 39277
英語 32 101 97 110 114
スペイン語 32 101 97 111 110
フランス語 32 101 115 105 116

以下のサイトを参考にさせていただきました

note.nkmk.me>>PythonのCounterでリストの各要素の出現個数をカウント
python公式>>組み込み関数chr(i)
python公式>>組み込み関数ord(c)

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村