In this tutorial we will go through how to do Amharic text classification on our new dataset. This is the Github repo if you want to follow along.

%matplotlib inline

import matplotlib
import pandas as pd
import numpy as np
from sklearn.utils import shuffle

np.random.seed(42) 

Exploratory Data Analysis

data = pd.read_csv('data/Amharic News Dataset.csv')

data = shuffle(data)
data.head()
headline category date views article link
15168 แˆ…แ‹ˆแˆƒแ‰ต แŠจแŒแ‹ดแˆซแˆŠแˆตแ‰ต แˆ€แ‹ญแˆŽแ‰ฝ แŒ‹แˆญ แŠฅแ‹จแˆฐแˆซแˆ แŠแ‹ แ‰ แˆ›แˆˆแ‰ต แˆ…แ‰ฅแˆจแ‰ฐแˆฐแ‰กแŠ• แŠฅแ‹ซแ‹ˆ... แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“ 26-Sep-20 2,204 แŠ แ‹ฒแˆต แŠ แ‰ แ‰ฃแฃ แˆ˜แˆตแŠจแˆจแˆ 16แฃ 2013 (แŠคแ.แ‰ข.แˆฒ) แˆ…แ‹ˆแˆƒแ‰ต แŠจแŒแ‹ดแˆซแˆŠแˆตแ‰ต ... https://www.fanabc.com/%e1%88%85%e1%8b%88%e1%8...
13721 แŠ แ‰ถ แ‹ฐแˆ˜แ‰€ แˆ˜แŠฎแŠ•แŠ• แŠจแ‰ฐแˆ˜แ‹ต แ‹จแŠ แแˆชแŠซ แ‰€แŠ•แ‹ต แˆแ‹ฉ แˆ˜แˆแŠฅแŠญแ‰ฐแŠ› แŒ‹แˆญ แ‰ฐแ‹ˆแ‹ซแ‹ฉ แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“ 1-Dec-20 336 แŠ แ‹ฒแˆต แŠ แ‰ แ‰ฃแฃ แˆ…แ‹ณแˆญ 22แฃ 2013 (แŠคแ.แ‰ข.แˆฒ) แ‹จแŠขแŒแ‹ดแˆช แˆแŠญแ‰ตแˆ แŒ แ‰…แˆ‹แ‹ญ... https://www.fanabc.com/%e1%8a%a0%e1%89%b6-%e1%...
21287 แ‰ แŠ แ‹ฒแˆต แ‹“แˆ˜แ‰ต แ‹‹แ‹œแˆ› แŠ แˆซแ‰ต แˆฐแ‹Žแ‰ฝ แ‰ แˆ›แ‹ญแ‰ณแ‹ˆแ‰ แ‰ฐแˆฝแŠจแˆญแŠซแˆชแ‹Žแ‰ฝ แ‰ฐแŒˆแŒญแ‰ฐแ‹ แˆžแ‰ฑ แ–แˆˆแ‰ฒแŠซ 15-Sep-19 Unknown แ‹จ2011 แ‹“.แˆ. แ‹ซแˆˆ แˆแŠ•แˆ แ‹จแ‹ˆแŠ•แŒ€แˆ แ‹ตแˆญแŒŠแ‰ต แ‰ แˆฐแˆ‹แˆ แˆ˜แŒ แŠ“แ‰€แ‰แŠ• แ–แˆŠแˆต แ‰ข... https://www.ethiopianreporter.com/article/16750
16264 โ€œแ‹จแˆ…แ‹ณแˆด แŒแ‹ตแ‰ก แ‰ แ‹ˆแ‰…แ‰ฑ แ‰ แŠแ‰ แˆฉ แ‹จแ‰ฆแˆญแ‹ต แˆฐแ‰ฅแˆณแ‰ข แŠ แ‹ตแˆซแŒŠ แˆแŒฃแˆชแŠแ‰ต แˆˆแŠจแแ‰ฐแŠ›... แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“ 18-Jun-20 1,751 แŠ แ‹ฒแˆต แŠ แ‰ แ‰ฃแฃ แˆฐแŠ” 11แฃ 2012 (แŠคแ. แ‰ข.แˆฒ) แ‹จแˆ…แ‹ณแˆด แŒแ‹ตแ‰ฅ แŒแŠ•แ‰ฃแ‰ณ แ‰ ... https://www.fanabc.com/%e1%8b%a8%e1%88%85%e1%8...
24513 แ‰ แŠฆแˆฎแˆšแ‹ซ แŠญแˆแˆ แŠ•แ‰ฅแˆจแ‰ถแ‰ปแ‰ธแ‹ แ‹จแ‹ˆแ‹ฐแˆ™แ‰ฃแ‰ธแ‹ แŠขแŠ•แ‰จแˆตแ‰ฐแˆฎแ‰ฝ แ‹จแŠซแˆณ แŒฅแ‹ซแ‰„ แŠฅแ‹ซแ‰€แˆจ... แ–แˆˆแ‰ฒแŠซ 23-Oct-16 Unknown แ‰ แˆ˜แˆตแŠจแˆจแˆ แ‹ˆแˆญ แˆ˜แŒจแˆจแˆป แ‰ แŠฆแˆฎแˆšแ‹ซ แŠญแˆแˆ แ‰ แ‰ฐแŠแˆณแ‹ แˆแŠจแ‰ต แŠ•แ‰ฅแˆจแ‰ถแ‰ปแ‰ธแ‹ แ‹จแ‹ˆแ‹ฐ... https://www.ethiopianreporter.com/content/%E1%...
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 50708 entries, 15168 to 15795
Data columns (total 6 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   headline  50694 non-null  object
 1   category  50706 non-null  object
 2   date      50707 non-null  object
 3   views     50707 non-null  object
 4   article   50707 non-null  object
 5   link      50706 non-null  object
dtypes: object(6)
memory usage: 2.7+ MB
data = data.dropna(subset=['article'])
data['link'].value_counts()
https://amharic.voanews.com//a/ethiopia-tigrai-mekele/5679989.html                                                                                                                                                                                                                                                                                                        3
https://amharic.voanews.com//a/rev-jesse-jackson-letter-to-hon-karen-bass-about-nile-river-5-21-2020o/5430577.html                                                                                                                                                                                                                                                        3
https://amharic.voanews.com//a/white-house-on-river-nile-and-ethiopias-dam-10-03-19/5110165.html                                                                                                                                                                                                                                                                          3
https://amharic.voanews.com//a/sudan-laws/5499793.html                                                                                                                                                                                                                                                                                                                    3
https://amharic.voanews.com//a/covid-ethiopia/5470709.html                                                                                                                                                                                                                                                                                                                3
                                                                                                                                                                                                                                                                                                                                                                         ..
https://am.al-ain.com/article/an-interim-experts-summit-is-to-be-formed-to-resolve-differences-among-olf-members                                                                                                                                                                                                                                                          1
https://soccerethiopia.net/football/7715                                                                                                                                                                                                                                                                                                                                  1
https://waltainfo.com/am/29558/                                                                                                                                                                                                                                                                                                                                           1
https://www.addisadmassnews.com/index.php?option=com_k2&view=item&id=20922:%E1%89%A02050-%E1%8A%A8%E1%8A%A0%E1%88%88%E1%88%9B%E1%89%BD%E1%8A%95-%E1%88%85%E1%8B%9D%E1%89%A5-%E1%88%A9%E1%89%A5-%E1%8B%AB%E1%88%85%E1%88%89-%E1%8A%A0%E1%8D%8D%E1%88%AA%E1%8A%AB%E1%8B%8D%E1%8B%AB%E1%8A%95-%E1%8B%AD%E1%88%86%E1%8A%93%E1%88%89-%E1%89%B0%E1%89%A3%E1%88%88&Itemid=212    1
https://waltainfo.com/am/28427/                                                                                                                                                                                                                                                                                                                                           1
Name: link, Length: 50008, dtype: int64
data.category.unique()
array(['แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“', 'แ–แˆˆแ‰ฒแŠซ', 'แˆตแ–แˆญแ‰ต', 'แ‹“แˆˆแˆ แŠ แ‰€แ แ‹œแŠ“', 'แ‰ขแ‹แŠแˆต', 'แˆ˜แ‹แŠ“แŠ›', nan],
      dtype=object)
data['word_len'] = data['article'].str.split().str.len()
data.head()
headline category date views article link word_len
15168 แˆ…แ‹ˆแˆƒแ‰ต แŠจแŒแ‹ดแˆซแˆŠแˆตแ‰ต แˆ€แ‹ญแˆŽแ‰ฝ แŒ‹แˆญ แŠฅแ‹จแˆฐแˆซแˆ แŠแ‹ แ‰ แˆ›แˆˆแ‰ต แˆ…แ‰ฅแˆจแ‰ฐแˆฐแ‰กแŠ• แŠฅแ‹ซแ‹ˆ... แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“ 26-Sep-20 2,204 แŠ แ‹ฒแˆต แŠ แ‰ แ‰ฃแฃ แˆ˜แˆตแŠจแˆจแˆ 16แฃ 2013 (แŠคแ.แ‰ข.แˆฒ) แˆ…แ‹ˆแˆƒแ‰ต แŠจแŒแ‹ดแˆซแˆŠแˆตแ‰ต ... https://www.fanabc.com/%e1%88%85%e1%8b%88%e1%8... 206
13721 แŠ แ‰ถ แ‹ฐแˆ˜แ‰€ แˆ˜แŠฎแŠ•แŠ• แŠจแ‰ฐแˆ˜แ‹ต แ‹จแŠ แแˆชแŠซ แ‰€แŠ•แ‹ต แˆแ‹ฉ แˆ˜แˆแŠฅแŠญแ‰ฐแŠ› แŒ‹แˆญ แ‰ฐแ‹ˆแ‹ซแ‹ฉ แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“ 1-Dec-20 336 แŠ แ‹ฒแˆต แŠ แ‰ แ‰ฃแฃ แˆ…แ‹ณแˆญ 22แฃ 2013 (แŠคแ.แ‰ข.แˆฒ) แ‹จแŠขแŒแ‹ดแˆช แˆแŠญแ‰ตแˆ แŒ แ‰…แˆ‹แ‹ญ... https://www.fanabc.com/%e1%8a%a0%e1%89%b6-%e1%... 141
21287 แ‰ แŠ แ‹ฒแˆต แ‹“แˆ˜แ‰ต แ‹‹แ‹œแˆ› แŠ แˆซแ‰ต แˆฐแ‹Žแ‰ฝ แ‰ แˆ›แ‹ญแ‰ณแ‹ˆแ‰ แ‰ฐแˆฝแŠจแˆญแŠซแˆชแ‹Žแ‰ฝ แ‰ฐแŒˆแŒญแ‰ฐแ‹ แˆžแ‰ฑ แ–แˆˆแ‰ฒแŠซ 15-Sep-19 Unknown แ‹จ2011 แ‹“.แˆ. แ‹ซแˆˆ แˆแŠ•แˆ แ‹จแ‹ˆแŠ•แŒ€แˆ แ‹ตแˆญแŒŠแ‰ต แ‰ แˆฐแˆ‹แˆ แˆ˜แŒ แŠ“แ‰€แ‰แŠ• แ–แˆŠแˆต แ‰ข... https://www.ethiopianreporter.com/article/16750 206
16264 โ€œแ‹จแˆ…แ‹ณแˆด แŒแ‹ตแ‰ก แ‰ แ‹ˆแ‰…แ‰ฑ แ‰ แŠแ‰ แˆฉ แ‹จแ‰ฆแˆญแ‹ต แˆฐแ‰ฅแˆณแ‰ข แŠ แ‹ตแˆซแŒŠ แˆแŒฃแˆชแŠแ‰ต แˆˆแŠจแแ‰ฐแŠ›... แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“ 18-Jun-20 1,751 แŠ แ‹ฒแˆต แŠ แ‰ แ‰ฃแฃ แˆฐแŠ” 11แฃ 2012 (แŠคแ. แ‰ข.แˆฒ) แ‹จแˆ…แ‹ณแˆด แŒแ‹ตแ‰ฅ แŒแŠ•แ‰ฃแ‰ณ แ‰ ... https://www.fanabc.com/%e1%8b%a8%e1%88%85%e1%8... 261
24513 แ‰ แŠฆแˆฎแˆšแ‹ซ แŠญแˆแˆ แŠ•แ‰ฅแˆจแ‰ถแ‰ปแ‰ธแ‹ แ‹จแ‹ˆแ‹ฐแˆ™แ‰ฃแ‰ธแ‹ แŠขแŠ•แ‰จแˆตแ‰ฐแˆฎแ‰ฝ แ‹จแŠซแˆณ แŒฅแ‹ซแ‰„ แŠฅแ‹ซแ‰€แˆจ... แ–แˆˆแ‰ฒแŠซ 23-Oct-16 Unknown แ‰ แˆ˜แˆตแŠจแˆจแˆ แ‹ˆแˆญ แˆ˜แŒจแˆจแˆป แ‰ แŠฆแˆฎแˆšแ‹ซ แŠญแˆแˆ แ‰ แ‰ฐแŠแˆณแ‹ แˆแŠจแ‰ต แŠ•แ‰ฅแˆจแ‰ถแ‰ปแ‰ธแ‹ แ‹จแ‹ˆแ‹ฐ... https://www.ethiopianreporter.com/content/%E1%... 461
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 50707 entries, 15168 to 15795
Data columns (total 7 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   headline  50694 non-null  object
 1   category  50706 non-null  object
 2   date      50707 non-null  object
 3   views     50707 non-null  object
 4   article   50707 non-null  object
 5   link      50706 non-null  object
 6   word_len  50707 non-null  int64 
dtypes: int64(1), object(6)
memory usage: 3.1+ MB
data.word_len.mean()
249.65586605399648

character level normalization

Amharic has characters wich have the same sound that can be interchangably used.

for example letters โ€˜แˆƒโ€™,โ€™แŠ…โ€™,โ€™แŠƒโ€™,โ€™แˆโ€™,โ€™แˆ“โ€™,โ€™แŠปโ€™,โ€™แˆ€โ€™ have the same sound so we change them to โ€˜แˆ€โ€™

import re
#method to normalize character level missmatch such as แŒธแˆ€แ‹ญ and แ€แˆแ‹ญ
def normalize_char_level_missmatch(input_token):
    rep1=re.sub('[แˆƒแŠ…แŠƒแˆแˆ“แŠป]','แˆ€',input_token)
    rep2=re.sub('[แˆ‘แŠแ‹…]','แˆ',rep1)
    rep3=re.sub('[แŠ‚แˆ’แŠบ]','แˆ‚',rep2)
    rep4=re.sub('[แŠŒแˆ”แ‹„]','แˆ„',rep3)
    rep5=re.sub('[แˆ•แŠ…]','แˆ…',rep4)
    rep6=re.sub('[แŠ†แˆ–แŠพ]','แˆ†',rep5)
    rep7=re.sub('[แˆ ]','แˆฐ',rep6)
    rep8=re.sub('[แˆก]','แˆฑ',rep7)
    rep9=re.sub('[แˆข]','แˆฒ',rep8)
    rep10=re.sub('[แˆฃ]','แˆณ',rep9)
    rep11=re.sub('[แˆค]','แˆด',rep10)
    rep12=re.sub('[แˆฅ]','แˆต',rep11)
    rep13=re.sub('[แˆฆ]','แˆถ',rep12)
    rep14=re.sub('[แ‹“แŠฃแ‹]','แŠ ',rep13)
    rep15=re.sub('[แ‹‘]','แŠก',rep14)
    rep16=re.sub('[แ‹’]','แŠข',rep15)
    rep17=re.sub('[แ‹”]','แŠค',rep16)
    rep18=re.sub('[แ‹•]','แŠฅ',rep17)
    rep19=re.sub('[แ‹–]','แŠฆ',rep18)
    rep20=re.sub('[แŒธ]','แ€',rep19)
    rep21=re.sub('[แŒน]','แ',rep20)
    rep22=re.sub('[แŒบ]','แ‚',rep21)
    rep23=re.sub('[แŒป]','แƒ',rep22)
    rep24=re.sub('[แŒผ]','แ„',rep23)
    rep25=re.sub('[แŒฝ]','แ…',rep24)
    rep26=re.sub('[แŒพ]','แ†',rep25)
    #Normalizing words with Labialized Amharic characters such as แ‰ แˆแ‰ฑแ‹‹แˆ or  แ‰ แˆแ‰ฑแŠ แˆ to  แ‰ แˆแ‰ทแˆ  
    rep27=re.sub('(แˆ‰[แ‹‹แŠ ])','แˆ',rep26)
    rep28=re.sub('(แˆ™[แ‹‹แŠ ])','แˆŸ',rep27)
    rep29=re.sub('(แ‰ฑ[แ‹‹แŠ ])','แ‰ท',rep28)
    rep30=re.sub('(แˆฉ[แ‹‹แŠ ])','แˆฏ',rep29)
    rep31=re.sub('(แˆฑ[แ‹‹แŠ ])','แˆท',rep30)
    rep32=re.sub('(แˆน[แ‹‹แŠ ])','แˆฟ',rep31)
    rep33=re.sub('(แ‰[แ‹‹แŠ ])','แ‰‹',rep32)
    rep34=re.sub('(แ‰ก[แ‹‹แŠ ])','แ‰ง',rep33)
    rep35=re.sub('(แ‰น[แ‹‹แŠ ])','แ‰ฟ',rep34)
    rep36=re.sub('(แˆ[แ‹‹แŠ ])','แŠ‹',rep35)
    rep37=re.sub('(แŠ‘[แ‹‹แŠ ])','แŠ—',rep36)
    rep38=re.sub('(แŠ™[แ‹‹แŠ ])','แŠŸ',rep37)
    rep39=re.sub('(แŠฉ[แ‹‹แŠ ])','แŠณ',rep38)
    rep40=re.sub('(แ‹™[แ‹‹แŠ ])','แ‹Ÿ',rep39)
    rep41=re.sub('(แŒ‰[แ‹‹แŠ ])','แŒ“',rep40)
    rep42=re.sub('(แ‹ฐ[แ‹‹แŠ ])','แ‹ท',rep41)
    rep43=re.sub('(แŒก[แ‹‹แŠ ])','แŒง',rep42)
    rep44=re.sub('(แŒฉ[แ‹‹แŠ ])','แŒฏ',rep43)
    rep45=re.sub('(แŒน[แ‹‹แŠ ])','แŒฟ',rep44)
    rep46=re.sub('(แ‰[แ‹‹แŠ ])','แ',rep45)
    rep47=re.sub('[แ‰Š]','แ‰',rep46) #แ‰ can be written as แ‰Š
    rep48=re.sub('[แŠต]','แŠฉ',rep47) #แŠฉ can be also written as แŠต  
    return rep48

data['article'] = data['article'].str.replace('[^\w\s]','')
data['article'] = data['article'].apply(lambda x: normalize_char_level_missmatch(x))
n_data = data[['article','category']]
n_data.head()

text,label = data['article'].values,data['category'].values
# n_data.head(5).to_csv('table.csv')

Naive Bays - CountVectorizer

from sklearn.feature_extraction.text import CountVectorizer
matrix = CountVectorizer(analyzer='word',max_features=1000,ngram_range=(1, 3))
X = matrix.fit_transform(text).toarray()
X
array([[0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 5],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]])
unique_label = list(set(label))
Y= []
for i in label:
    Y.append(unique_label.index(i))
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y,test_size=0.2)
# Naive Bayes 
from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(X_train, y_train)

# Predict Class
y_pred = classifier.predict(X_test)

# Accuracy 
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)

accuracy
0.6220666535200158
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred, target_names=['แˆตแ–แˆญแ‰ต', 'แˆ˜แ‹แŠ“แŠ›', 'แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“', 'แ‰ขแ‹แŠแˆต', 'แ‹“แˆˆแˆ แŠ แ‰€แ แ‹œแŠ“', 'แ–แˆˆแ‰ฒแŠซ', 'nan']))
              precision    recall  f1-score   support

        แˆตแ–แˆญแ‰ต       0.82      0.39      0.53      4154
        แˆ˜แ‹แŠ“แŠ›       0.37      0.72      0.49       762
  แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“       0.00      0.00      0.00         0
        แ‰ขแ‹แŠแˆต       0.44      0.90      0.59      1334
  แ‹“แˆˆแˆ แŠ แ‰€แ แ‹œแŠ“       0.96      0.94      0.95      1934
        แ–แˆˆแ‰ฒแŠซ       0.59      0.55      0.57      1808
         nan       0.35      0.78      0.48       150

    accuracy                           0.62     10142
   macro avg       0.50      0.61      0.52     10142
weighted avg       0.72      0.62      0.62     10142

Naive Bays - tf -df

from sklearn.feature_extraction.text import TfidfVectorizer
matrix = TfidfVectorizer(analyzer='word',max_features=1000,ngram_range=(1, 3))
X = matrix.fit_transform(text).toarray()
X
array([[0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.        ],
       [0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.        ],
       [0.06538107, 0.        , 0.        , ..., 0.        , 0.        ,
        0.33719558],
       ...,
       [0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.        ],
       [0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.        ],
       [0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.        ]])
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y,test_size=0.2)
# Naive Bayes 
from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(X_train, y_train)

# Predict Class
y_pred = classifier.predict(X_test)

# Accuracy 
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)

accuracy
0.6230526523368172
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred, target_names=['แˆตแ–แˆญแ‰ต', 'แˆ˜แ‹แŠ“แŠ›', 'แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“', 'แ‰ขแ‹แŠแˆต', 'แ‹“แˆˆแˆ แŠ แ‰€แ แ‹œแŠ“', 'แ–แˆˆแ‰ฒแŠซ', 'nan']))
              precision    recall  f1-score   support

        แˆตแ–แˆญแ‰ต       0.89      0.34      0.50      4106
        แˆ˜แ‹แŠ“แŠ›       0.32      0.82      0.46       754
  แˆ€แŒˆแˆญ แŠ แ‰€แ แ‹œแŠ“       0.00      0.00      0.00         1
        แ‰ขแ‹แŠแˆต       0.62      0.78      0.69      1309
  แ‹“แˆˆแˆ แŠ แ‰€แ แ‹œแŠ“       0.98      0.95      0.97      1986
        แ–แˆˆแ‰ฒแŠซ       0.49      0.69      0.57      1875
         nan       0.23      0.87      0.36       111

    accuracy                           0.62     10142
   macro avg       0.50      0.64      0.51     10142
weighted avg       0.75      0.62      0.62     10142