<filename>coh-metrix_3/book_test1/03_sansyou_2.py<gh_stars>0
import nltk
import numpy as np
import re
import copy


from scipy import stats
from scipy.stats import spearmanr

#多読図書のYL
#x_tadoku = [1.4,1.8,1.8,1.8,1.8,1.4,1.4,1.4,1.2,1.2,
#                   1.2,2.6,2.6,2.6,3.6,3.6,3.2,3.2,2.4,2.4,
#                   2.4,2.4,2,2,2,2,2.6,3.6,3.2,2.8,
#                   2.8,2.8,4.4,4.4,4.4,4.4,4,4,4,4,
#                   4.8,4.8,4.8,2.5,2.5,2.5,2.5,2.5,2.5,2.5]

#一般図書のYL
#x_ippan = [8,6.6,8.5,6.5,7,7,7,7.6,7.5,7.5,
#                7.3,7,8.2,7,6.6,7.7,7,5,5.5,7,
#                7,7,7,7,7.5,5.1,7,7,7,7,
#                7.6,6.5,7,6.5,7,8.5,7,6.5,9.5,
#                7.7,7.5,7,7,8.5,7,5.5,6.6,8.5,7.5,8]


#多読図書と一般図書のYL
#x_zenbu = x_tadoku + x_ippan

x_zenbu = [1.2, 1.2, 3.6, 6, 6.7, 7, 7, 5, 6.5, 7,
            7, 7, 7, 2.5, 6.5, 8, 5.7, 7, 7, 7,
            7, 7, 5.5, 2.5, 7, 2.5, 6.2, 7, 5, 2.5,
            7.7, 2.5, 8, 5.5, 8, 6, 7.5, 7, 6.5, 2.5,
            8, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 2.5,
            2.5, 7.5, 5.5, 7, 7, 5, 7, 6.3, 7, 7,
            6.5, 8, 5.5, 7, 7, 7.7, 7, 7.5, 7, 7.5,
            7, 8.7, 7, 2.5, 7.5, 8, 2.5, 8, 8, 2.5,
            8, 6.5, 6.5, 8.5, 5, 2.5, 5, 7, 5, 5.5, 
            5.2, 7.5, 7, 5.5, 9.5, 6, 8.5, 4.7, 5, 1.8]


text_suu=101 #テキストの番号

keisankekka=[]#１テキストでの計算結果


while text_suu < 201:
    #text_listにリストとして読み込む
    with open('book'+ str(text_suu) +'_test1.txt', 'r') as f:
        #改行("\n")を""に変換
        #text_list = f.read().splitlines()
        text = f.read()


    #正規表現で"を削除
    text = re.sub('"', '', text)
    text = text.lower()

    morph = nltk.word_tokenize(text)
    pos = nltk.pos_tag(morph)
    #print(pos)

    kazu=0
    hinsi=[]#品詞の名前
    hinsi_kosuu=[]#品詞の個数．配列は品詞の名前と対応している．
    list_bangou=0

    naiyougo=0
    naiyougo_list=["NN","NNS", "NNP", "NNPS", "VB","VBD","VBG", "VBN", "VBP", "VBZ","JJ", "JJR", "JJS", "RB", "RBR", "RBS","CD","UH"]
    #naiyougo_list=["NN", "VB", "JJ", "RB"] #名詞，動詞，形容詞，副詞

    naiyougo_iti=[]
    naiyougo_ni=[]
    kigou=0
    kigou_reigai=["=","+","'"]
    bunnsuu=0

    zyuuhuku_list=[]

    zyuuhuku_dic={}

    tangosuu_1=0
    tangosuu_2=0

    wariai=[]

    while kazu < len(pos):
        #文ごとの文字数を数える
        tangosuu_2+=1
        #. が出たら，数を数える
        if pos[kazu][1] == ".":
            if bunnsuu == 0:
                bunnsuu=1

                tangosuu_1=tangosuu_2
                tangosuu_2=0
                
            
            else:
                purasu = set(naiyougo_iti) & set(naiyougo_ni)
                naiyougo+=len(purasu) #重複していた内容語の個数
                purasu2=list(purasu) #リストに変更
                zyuuhuku_list = zyuuhuku_list+purasu2 #重複している内容語をリストに追加
                naiyougo_iti.clear() #リストの中身を消す
                naiyougo_iti = copy.copy(naiyougo_ni) #リスト２の内容をリスト１に入れ替える
                naiyougo_ni.clear() #リスト２の中身を消す
                
                #内容語の数/隣接する文の単語数
                if tangosuu_1!=0 and tangosuu_2!=0:
                    wariai.append(len(purasu)/(tangosuu_1+tangosuu_2))
                
                else:
                    wariai.append(0)
                    
                tangosuu_1=tangosuu_2
                tangosuu_2=0
                


        #内容語ができてきたらリストに入れる
        elif pos[kazu][1] in naiyougo_list:
            if bunnsuu == 0:
                naiyougo_iti.append(pos[kazu][0])

            else:
                naiyougo_ni.append(pos[kazu][0])
                
     
        

        #いらない記号は排除
        if (re.match("\W", pos[kazu][1].lower())) and (pos[kazu][0].lower() in kigou_reigai) :
            kigou+=1
            tangosuu_2-=1
        #品詞をリストに入れる
        #もう出ている品詞なら，hinsi_kosuuの数を１増やす
        elif pos[kazu][1] in hinsi:
            list_bangou=hinsi.index(pos[kazu][1])
            hinsi_kosuu[list_bangou]=hinsi_kosuu[list_bangou]+1


            
        #新しい品詞が出てきたら，hinsiリストに品詞を追加して，hinsi_kosuuリストを１にする．
        else:
            hinsi.append(pos[kazu][1])
            hinsi_kosuu.append(1)

            

        
        kazu+=1




    #print(hinsi)
    #print(hinsi_kosuu)

    #print("内容語",naiyougo)
    zentai = sum(hinsi_kosuu)
    #print("総単語数",zentai)




    #重複する内容語の割合
    hasseiritu = naiyougo/zentai
    hasseiritu = sum(wariai)/len(wariai)

    #計算結果をリストに入れる
    keisankekka.append(hasseiritu)
    print(text_suu)


    text_suu+=1





###############################
#相関係数の計算

#相関計算
x_np = np.array(x_zenbu)
y_np = np.array(keisankekka)



#x_zenbuが正規性がないので，スピアマンの相関係数
#スピアマンの順位相関係数
correlation, pvalue = spearmanr(x_zenbu, keisankekka)
soukan = correlation


print("参照の結束性レベル - 隣接している文における重複する内容語の割合")
print("相関結果:", soukan)

print("隣接している文における重複する内容語の割合:", keisankekka)
    





<filename>coh-metrix_3/book_test1/03_sansyou_2.py<gh_stars>0
import nltk
import numpy as np
import re
import copy


from scipy import stats
from scipy.stats import spearmanr

#多読図書のYL
#x_tadoku = [1.4,1.8,1.8,1.8,1.8,1.4,1.4,1.4,1.2,1.2,
#                   1.2,2.6,2.6,2.6,3.6,3.6,3.2,3.2,2.4,2.4,
#                   2.4,2.4,2,2,2,2,2.6,3.6,3.2,2.8,
#                   2.8,2.8,4.4,4.4,4.4,4.4,4,4,4,4,
#                   4.8,4.8,4.8,2.5,2.5,2.5,2.5,2.5,2.5,2.5]

#一般図書のYL
#x_ippan = [8,6.6,8.5,6.5,7,7,7,7.6,7.5,7.5,
#                7.3,7,8.2,7,6.6,7.7,7,5,5.5,7,
#                7,7,7,7,7.5,5.1,7,7,7,7,
#                7.6,6.5,7,6.5,7,8.5,7,6.5,9.5,
#                7.7,7.5,7,7,8.5,7,5.5,6.6,8.5,7.5,8]


#多読図書と一般図書のYL
#x_zenbu = x_tadoku + x_ippan

x_zenbu = [1.2, 1.2, 3.6, 6, 6.7, 7, 7, 5, 6.5, 7,
            7, 7, 7, 2.5, 6.5, 8, 5.7, 7, 7, 7,
            7, 7, 5.5, 2.5, 7, 2.5, 6.2, 7, 5, 2.5,
            7.7, 2.5, 8, 5.5, 8, 6, 7.5, 7, 6.5, 2.5,
            8, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 2.5,
            2.5, 7.5, 5.5, 7, 7, 5, 7, 6.3, 7, 7,
            6.5, 8, 5.5, 7, 7, 7.7, 7, 7.5, 7, 7.5,
            7, 8.7, 7, 2.5, 7.5, 8, 2.5, 8, 8, 2.5,
            8, 6.5, 6.5, 8.5, 5, 2.5, 5, 7, 5, 5.5, 
            5.2, 7.5, 7, 5.5, 9.5, 6, 8.5, 4.7, 5, 1.8]


text_suu=101 #テキストの番号

keisankekka=[]#１テキストでの計算結果


while text_suu < 201:
    #text_listにリストとして読み込む
    with open('book'+ str(text_suu) +'_test1.txt', 'r') as f:
        #改行("\n")を""に変換
        #text_list = f.read().splitlines()
        text = f.read()


    #正規表現で"を削除
    text = re.sub('"', '', text)
    text = text.lower()

    morph = nltk.word_tokenize(text)
    pos = nltk.pos_tag(morph)
    #print(pos)

    kazu=0
    hinsi=[]#品詞の名前
    hinsi_kosuu=[]#品詞の個数．配列は品詞の名前と対応している．
    list_bangou=0

    naiyougo=0
    naiyougo_list=["NN","NNS", "NNP", "NNPS", "VB","VBD","VBG", "VBN", "VBP", "VBZ","JJ", "JJR", "JJS", "RB", "RBR", "RBS","CD","UH"]
    #naiyougo_list=["NN", "VB", "JJ", "RB"] #名詞，動詞，形容詞，副詞

    naiyougo_iti=[]
    naiyougo_ni=[]
    kigou=0
    kigou_reigai=["=","+","'"]
    bunnsuu=0

    zyuuhuku_list=[]

    zyuuhuku_dic={}

    tangosuu_1=0
    tangosuu_2=0

    wariai=[]

    while kazu < len(pos):
        #文ごとの文字数を数える
        tangosuu_2+=1
        #. が出たら，数を数える
        if pos[kazu][1] == ".":
            if bunnsuu == 0:
                bunnsuu=1

                tangosuu_1=tangosuu_2
                tangosuu_2=0
                
            
            else:
                purasu = set(naiyougo_iti) & set(naiyougo_ni)
                naiyougo+=len(purasu) #重複していた内容語の個数
                purasu2=list(purasu) #リストに変更
                zyuuhuku_list = zyuuhuku_list+purasu2 #重複している内容語をリストに追加
                naiyougo_iti.clear() #リストの中身を消す
                naiyougo_iti = copy.copy(naiyougo_ni) #リスト２の内容をリスト１に入れ替える
                naiyougo_ni.clear() #リスト２の中身を消す
                
                #内容語の数/隣接する文の単語数
                if tangosuu_1!=0 and tangosuu_2!=0:
                    wariai.append(len(purasu)/(tangosuu_1+tangosuu_2))
                
                else:
                    wariai.append(0)
                    
                tangosuu_1=tangosuu_2
                tangosuu_2=0
                


        #内容語ができてきたらリストに入れる
        elif pos[kazu][1] in naiyougo_list:
            if bunnsuu == 0:
                naiyougo_iti.append(pos[kazu][0])

            else:
                naiyougo_ni.append(pos[kazu][0])
                
     
        

        #いらない記号は排除
        if (re.match("\W", pos[kazu][1].lower())) and (pos[kazu][0].lower() in kigou_reigai) :
            kigou+=1
            tangosuu_2-=1
        #品詞をリストに入れる
        #もう出ている品詞なら，hinsi_kosuuの数を１増やす
        elif pos[kazu][1] in hinsi:
            list_bangou=hinsi.index(pos[kazu][1])
            hinsi_kosuu[list_bangou]=hinsi_kosuu[list_bangou]+1


            
        #新しい品詞が出てきたら，hinsiリストに品詞を追加して，hinsi_kosuuリストを１にする．
        else:
            hinsi.append(pos[kazu][1])
            hinsi_kosuu.append(1)

            

        
        kazu+=1




    #print(hinsi)
    #print(hinsi_kosuu)

    #print("内容語",naiyougo)
    zentai = sum(hinsi_kosuu)
    #print("総単語数",zentai)




    #重複する内容語の割合
    hasseiritu = naiyougo/zentai
    hasseiritu = sum(wariai)/len(wariai)

    #計算結果をリストに入れる
    keisankekka.append(hasseiritu)
    print(text_suu)


    text_suu+=1





###############################
#相関係数の計算

#相関計算
x_np = np.array(x_zenbu)
y_np = np.array(keisankekka)



#x_zenbuが正規性がないので，スピアマンの相関係数
#スピアマンの順位相関係数
correlation, pvalue = spearmanr(x_zenbu, keisankekka)
soukan = correlation


print("参照の結束性レベル - 隣接している文における重複する内容語の割合")
print("相関結果:", soukan)

print("隣接している文における重複する内容語の割合:", keisankekka)
    





#多読図書のYL #x_tadoku = [1.4,1.8,1.8,1.8,1.8,1.4,1.4,1.4,1.2,1.2, #                   1.2,2.6,2.6,2.6,3.6,3.6,3.2,3.2,2.4,2.4, #                   2.4,2.4,2,2,2,2,2.6,3.6,3.2,2.8, #                   2.8,2.8,4.4,4.4,4.4,4.4,4,4,4,4, #                   4.8,4.8,4.8,2.5,2.5,2.5,2.5,2.5,2.5,2.5] #一般図書のYL #x_ippan = [8,6.6,8.5,6.5,7,7,7,7.6,7.5,7.5, #                7.3,7,8.2,7,6.6,7.7,7,5,5.5,7, #                7,7,7,7,7.5,5.1,7,7,7,7, #                7.6,6.5,7,6.5,7,8.5,7,6.5,9.5, #                7.7,7.5,7,7,8.5,7,5.5,6.6,8.5,7.5,8] #多読図書と一般図書のYL #x_zenbu = x_tadoku + x_ippan #テキストの番号 #１テキストでの計算結果 #text_listにリストとして読み込む #改行("\n")を""に変換 #text_list = f.read().splitlines() #正規表現で"を削除 #print(pos) #品詞の名前 #品詞の個数．配列は品詞の名前と対応している． #naiyougo_list=["NN", "VB", "JJ", "RB"] #名詞，動詞，形容詞，副詞 #文ごとの文字数を数える #. が出たら，数を数える #重複していた内容語の個数 #リストに変更 #重複している内容語をリストに追加 #リストの中身を消す #リスト２の内容をリスト１に入れ替える #リスト２の中身を消す #内容語の数/隣接する文の単語数 #内容語ができてきたらリストに入れる #いらない記号は排除 #品詞をリストに入れる #もう出ている品詞なら，hinsi_kosuuの数を１増やす #新しい品詞が出てきたら，hinsiリストに品詞を追加して，hinsi_kosuuリストを１にする． #print(hinsi) #print(hinsi_kosuu) #print("内容語",naiyougo) #print("総単語数",zentai) #重複する内容語の割合 #計算結果をリストに入れる ############################### #相関係数の計算 #相関計算 #x_zenbuが正規性がないので，スピアマンの相関係数 #スピアマンの順位相関係数