pythonを利用した特許情報分析

課題・主要構成抽出

/

# 課題・主要構成抽出(8階層用)

# 処理内容は以下のとおり。

## 「課題分析公報.xlsx」の公報データから課題を抽出し、課題コードと課題KWを追加し、

## さらに、要部構成、要部構成単語、新規要素、類似語、類似語除去後新規要素、主要構成要件を追加する

## 課題コードと課題KWの追加だけで良い場合は、step5 「課題コードの上位コード削除」の次のセルにstop

## 書き込み、強制的に中断せるようにすれば良い。

## 処理結果は会社名(略称)のフォルダ(DIC課題・主要構成.xlsx)として同じ階層に書き出される

# 処理stepの内容は以下のとおり。

# step1 課題コード表読み込み

# step2 課題KW表読み込み

# step3 公報データを読み込み、リスト化、不要文字の除去、本発明などを含む単文を抽出

# step4 コード付与

# step5 課題コードの上位コード削除

# step6 請求項1の切り出し、文節

# step7 発明の略称を抽出

# step8 要部構成に絞り込み

# step9 新規要素抽出

# step10 類似語削除

# step11 主要構成要件抽出

# 前準備

# このプログラムを使用するためには、「pat_python」と同じ階層に次のデータを準備しておく必要がある。

## 1:「課題分析公報」

### データ項目は、「公報番号、出願番号、発行日、発明の名称、出願人 発明者、IPC、FI、Fターム、

### 要約、発明の目的、利用分野、従来の技術、発明の効果、課題、請求項1」

### 処理可能件数は、71,723件までテスト済み

## 2:「課題code化data.xlsx」 

### 8階層の課題コード表(105,173行)と、No+3つのKW+課題+課題コードを含む課題KW表(113,833行)と、

### データ数を減らすための「補助KW」(29列X52行)

## 3:「降順課題コード表.xlsx」

### 上記「課題code化data.xlsx」 から重複している課題コードと対応する行データを削除し、

### 課題コードを降順としてソートしたもの。

### これは、 step5 「課題コードの上位コード削除」で必要となるものであるが、

### 上記「課題code化data.xlsx」 の課題KWが変更されない限り、一度、作成するだけで良い。

# step1 課題コード表読み込み

import pandas as pd

import numpy as np

import collections

import openpyxl

import re

# コードデータ読み込み

code_data = pd.read_excel(‘課題code化data.xlsx’,sheet_name=’課題code表’) 

code_data = code_data.dropna(how=’all’)    # 全列がNaNである行を削除

print(‘コード件数=’,len(code_data))

# 階層1の課題と課題コード読み込み

code11_data = code_data.iloc[:,1]    # 階層1コード内容

code12_data = code_data.iloc[:,2]    # 階層1コード

code11_list = []

for str1 in code11_data:   # listに変換

    code11_list.append(str1)

# print(code11_list[0:1])

code12_list = []

for str1 in code12_data:   # listに変換

    code12_list.append(str1)

# print(code12_list[0:1])

txt_list01 = []

code_list01 = []

for n1, str1 in enumerate(code11_list): 

    if str(str1) != ‘nan’:

#        print(str1)

        txt_list01.append(str1)

        code_list01.append(code12_list[n1])

print(‘階層1=’,txt_list01)

print(code_list01)    

# 階層2の課題と課題コード読み込み

code21_data = code_data.iloc[:,3]    # 階層2コード内容

code22_data = code_data.iloc[:,5]    # 階層2コード

code21_list = []

for str1 in code21_data:   # listに変換

    code21_list.append(str1)

# print(code21_list[0:5])

code22_list = []

for str1 in code22_data:   # listに変換

    code22_list.append(str1)

# print(code22_list[0:5])

txt_list02 = []

code_list02 = []

for n1, str1 in enumerate(code21_list): 

    if str(str1) != ‘nan’:

        txt_list02.append(str1)

        code_list02.append(code22_list[n1])

print(‘階層2=’,txt_list02[0:5])

print(code_list02[0:5]) 

# 階層3の課題と課題コード読み込み

code31_data = code_data.iloc[:,6]    # 階層3コード内容

code32_data = code_data.iloc[:,8]    # 階層3コード

code31_list = []

for str1 in code31_data:   # listに変換

    code31_list.append(str1)

# print(code31_list[0:5])

code32_list = []

for str1 in code32_data:   # listに変換

    code32_list.append(str1)

# print(code32_list[0:5])

txt_list03 = []

code_list03 = []

for n1, str1 in enumerate(code31_list): 

    if str(str1) != ‘nan’:

        txt_list03.append(str1)

        code_list03.append(code32_list[n1])

print(‘階層3=’,txt_list03[0:5])

print(code_list03[0:5]) 

# 階層4の課題と課題コード読み込み

code41_data = code_data.iloc[:,9]    # 階層4コード内容

code42_data = code_data.iloc[:,11]    # 階層4コード

code41_list = []

for str1 in code41_data:   # listに変換

    code41_list.append(str1)

# print(code41_list[0:5])

code42_list = []

for str1 in code42_data:   # listに変換

    code42_list.append(str1)

# print(code42_list[0:5])

txt_list04 = []

code_list04 = []

for n1, str1 in enumerate(code41_list): 

    if str(str1) != ‘nan’:

        txt_list04.append(str1)

        code_list04.append(code42_list[n1])

print(‘階層4=’,txt_list04[0:5])

print(code_list04[0:5]) 

# 階層5の課題と課題コード読み込み

code51_data = code_data.iloc[:,12]    # 階層5コード内容

code52_data = code_data.iloc[:,14]    # 階層5コード

code51_list = []

for str1 in code51_data:   # listに変換

    code51_list.append(str1)

# print(code51_list[0:5])

code52_list = []

for str1 in code52_data:   # listに変換

    code52_list.append(str1)

# print(code52_list[0:5])

txt_list05 = []

code_list05 = []

for n1, str1 in enumerate(code51_list): 

    if str(str1) != ‘nan’:

        txt_list05.append(str1)

        code_list05.append(code52_list[n1])

print(‘階層5=’,txt_list05[0:5])

print(code_list05[0:5]) 

# 階層6の課題と課題コード読み込み

code61_data = code_data.iloc[:,15]    # 階層6コード内容

code62_data = code_data.iloc[:,17]    # 階層6コード

code61_list = []

for str1 in code61_data:   # listに変換

    code61_list.append(str1)

# print(code61_list[0:5])

code62_list = []

for str1 in code62_data:   # listに変換

    code62_list.append(str1)

# print(code62_list[0:5])

txt_list06 = []

code_list06 = []

for n1, str1 in enumerate(code61_list): 

    if str(str1) != ‘nan’:

        txt_list06.append(str1)

        code_list06.append(code62_list[n1])

print(‘階層6=’,txt_list06[0:1])

print(code_list06[0:1]) 

# 階層7の課題と課題コード読み込み

code71_data = code_data.iloc[:,18]    # 階層7コード内容

code72_data = code_data.iloc[:,20]    # 階層7コード

code71_list = []

for str1 in code71_data:   # listに変換

    code71_list.append(str1)

# print(code71_list[0:5])

code72_list = []

for str1 in code72_data:   # listに変換

    code72_list.append(str1)

# print(code72_list[0:5])

txt_list07 = []

code_list07 = []

for n1, str1 in enumerate(code71_list): 

    if str(str1) != ‘nan’:

        txt_list07.append(str1)

        code_list07.append(code62_list[n1])

print(‘階層7=’,txt_list07[0:1])

print(code_list07[0:1])

# 階層8の課題と課題コード読み込み

code81_data = code_data.iloc[:,21]    # 階層8コード内容

code82_data = code_data.iloc[:,23]    # 階層8コード

code81_list = []

for str1 in code81_data:   # listに変換

    code81_list.append(str1)

# print(code81_list[0:5])

code82_list = []

for str1 in code82_data:   # listに変換

    code82_list.append(str1)

# print(code82_list[0:5])

txt_list08 = []

code_list08 = []

for n1, str1 in enumerate(code81_list): 

    if str(str1) != ‘nan’:

        txt_list08.append(str1)

        code_list08.append(code82_list[n1])

print(‘階層8=’,txt_list08[0:1])

print(code_list08[0:1])

# DataFrame化

df1 = pd.DataFrame(data=txt_list01, columns=[‘課題’])

df2 = pd.DataFrame(data=code_list01, columns=[‘課題コード’])

# 横に結合

df31 =pd.concat([df2, df1], axis=1)

# DataFrame化

df1 = pd.DataFrame(data=txt_list02, columns=[‘課題’])

df2 = pd.DataFrame(data=code_list02, columns=[‘課題コード’])

# 横に結合

df32 =pd.concat([df2, df1], axis=1)

# DataFrame化

df1 = pd.DataFrame(data=txt_list03, columns=[‘課題’])

df2 = pd.DataFrame(data=code_list03, columns=[‘課題コード’])

# 横に結合

df33 =pd.concat([df2, df1], axis=1)

# DataFrame化

df1 = pd.DataFrame(data=txt_list04, columns=[‘課題’])

df2 = pd.DataFrame(data=code_list04, columns=[‘課題コード’])

# 横に結合

df34 =pd.concat([df2, df1], axis=1)

# DataFrame化

df1 = pd.DataFrame(data=txt_list05, columns=[‘課題’])

df2 = pd.DataFrame(data=code_list05, columns=[‘課題コード’])

# 横に結合

df35 =pd.concat([df2, df1], axis=1)

# DataFrame化

df1 = pd.DataFrame(data=txt_list06, columns=[‘課題’])

df2 = pd.DataFrame(data=code_list06, columns=[‘課題コード’])

# 横に結合

df36 =pd.concat([df2, df1], axis=1)

# DataFrame化

df1 = pd.DataFrame(data=txt_list07, columns=[‘課題’])

df2 = pd.DataFrame(data=code_list07, columns=[‘課題コード’])

# 横に結合

df37 =pd.concat([df2, df1], axis=1)

# DataFrame化

df1 = pd.DataFrame(data=txt_list08, columns=[‘課題’])

df2 = pd.DataFrame(data=code_list08, columns=[‘課題コード’])

# 横に結合

df38 =pd.concat([df2, df1], axis=1)

# 階層1~階層8を縦に結合

df40 = pd.concat([df31, df32,df33,df34,df35,df36,df37,df38], axis=0)

# ソート

df40 = df40.sort_values(‘課題コード’, ascending=True)    # 昇順

print(len(df40))

print(df40[0:5])

# CSVとして書き出し

# df40.to_csv(‘課題コード表.csv’,encoding=’utf-8′, index=False)

print(“”)

# print(‘課題コード表.csvを書き出しました’)    

print(“課題コード表を読み込みました”)

# step2 課題KW表読み込み

# 課題KWデータ読み込み

kw_code_data = pd.read_excel(‘課題code化data.xlsx’,sheet_name=’課題KW表’) 

kw_code_data = kw_code_data.dropna(how=’all’)    # 全列がNaNである行を削除

print(‘課題KW数=’,len(kw_code_data))

# 階層1の課題と課題コード読み込み

kw01_data = kw_code_data.iloc[:,1]    # 元の語句1

kw02_data = kw_code_data.iloc[:,2]    # 元の語句2

kw03_data = kw_code_data.iloc[:,3]    # 元の語句3

word01_data = kw_code_data.iloc[:,4]    # 課題語

code01_data = kw_code_data.iloc[:,5]    # 課題コード

# KW表のKW1の末尾が”に関” であれば、末尾を“を提”に修正したKW1+KW2+KW3を追加

## 現在のデータでは6793件が追加される

n01_list=[]    # “を関”を追加したn1のリスト

kw01_list = []

for n1, str1 in enumerate(kw01_data):   # 元の語句1読み込み

    # flg01=0

    # if str1==”水中浮遊式水流発電装置に関” : 

        # print(str1)

        # flg01=1

    kw01_list.append(str1)

    np = len(str(str1))

    if np>3:

        bwrd =str1[np-2:]

        if bwrd==”に関”:

            str2 = str1[0:np-2] + “を関”

            # if flg01==1: print(str2)

            kw01_list.append(str2)

            n01_list.append(n1)

            # print(n1,str1)

            # print(n1,str2)

n01_list.append(0)    # endでのエラーを防止するためにダミー(0)を追加

print(“元の件数=”,len(kw01_data))

print(“追加した件数=”,len(n01_list))

print(‘n01_list[0:5]=’,n01_list[0:5])

print(“追加後の件数”,len(kw01_list))    

print(‘kw01_list[0:5]=’,kw01_list[0:5])

n01=0

kw02_list = []

for n1, str1 in enumerate(kw02_data):   # 元の語句2読み込み

    kw02_list.append(str1)

    if n1==n01_list[n01]:

        n01=n01+1

        kw02_list.append(str1)

        # print(kw01_data[n1])

        # print(str1)    

# print(len(kw02_list))

print(‘kw02_list[0:5]=’,kw02_list[0:5])

n01=0

kw03_list = []

# for str1 in kw03_data:   # 元の語句3読み込み

for n1, str1 in enumerate(kw03_data):   # 元の語句3読み込み

    kw03_list.append(str1)

    if n1==n01_list[n01]:

        n01=n01+1

        kw03_list.append(str1)

        # print(kw01_data[n1])

        # print(str1) 

# print(len(kw03_list)) 

print(‘kw03_list[0:5]=’,kw03_list[0:5])

n01=0

word01_list = []

for n1, str1 in enumerate(word01_data):   # 課題語

    word01_list.append(str1)

    if n1==n01_list[n01]:

        n01=n01+1

        word01_list.append(str1)

        # print(word01_data[n1])

        # print(str1) 

# print(len(word01_list)) 

print(‘課題[0:5]=’,word01_list[0:5])

n01=0

code01_list = []

for n1, str1 in enumerate(code01_data):   # 課題コード

    code01_list.append(str1)

    if n1==n01_list[n01]:

        n01=n01+1

        code01_list.append(str1)

        # print(code01_data[n1])

        # print(str1)

# print(len(code01_list)) 

print(‘課題コード[0:5]=’,code01_list[0:5])

# 補助KWデータ読み込み

hojokw_data = pd.read_excel(‘課題code化data.xlsx’,sheet_name=’補助KW’) 

hojokw_data = hojokw_data.dropna(how=’all’)    # 全列がNaNである行を削除

print(‘補助KW数=’,len(hojokw_data))

# bname = ‘低減+’

# print(hojokw_data[bname])

print(“”)

print(“課題KW表を読み込みました”)

# step3 公報データを読み込み、リスト化、不要文字の除去、本発明などを含む単文を抽出

# import pandas as pd

# import numpy as np

# import collections

# import openpyxl

# import re

# 公報データ読み込み

pat_data = pd.read_excel(‘課題分析公報.xlsx’,sheet_name=’母集合’) 

pat_data = pat_data.dropna(how=’all’)    # 全列がNaNである行を削除

print(‘公報件数=’,len(pat_data))

# 公報番号欄読み込み

patno_data = pat_data.iloc[:,0]

pn_list =[]

for str1 in patno_data:

    str0 = str1

    pn_list.append(str(str0))

# 出願番号読み込み

apno_data = pat_data.iloc[:,1]

an_list =[]

for str1 in apno_data:

    str0 = str1

    an_list.append(str(str0))

# 発行日読み込み

pd_data = pat_data.iloc[:,2]

pd_list =[]

for str1 in pd_data:

    str0 = str(str1)[0:10]

    pd_list.append(str(str0))

# 発明の名称欄読み込み

title_data = pat_data.iloc[:,3]

nmax=0

ti_list =[]

ti_list_min =[]

for n1,str1 in enumerate(title_data):

    # 確認

    # print(n1,str1) 

    str2 = str1

    flg=0

    npos = str1.find(“と、その”) 

    if npos>0:

        str2 = str2[0:npos]        

    npos = str1.find(“、”) 

    if npos>0:

        str2 = str2[0:npos]

        flg=1

    npos = str2.find(“及び”) 

    if npos>0:

        str2 = str1[0:npos]

    npos = str2.find(“および”) 

    if npos>0:

        str2 = str2[0:npos]         

    npos = str2.find(“とその”) 

    if npos>0:

        str2 = str2[0:npos]    

    npos = str2.find(“とこれに用いる”) 

    if npos>0:

        str2 = str2[0:npos] 

    npos = str2.find(“又は”) 

    if npos>0:

        str2 = str2[0:npos]   

    npos = str2.find(“ならびに”) 

    if npos>0:

        str2 = str2[0:npos]  

    npos = str2.find(“用いる”) 

    if npos>0:

        str2 = str2[npos:]  

    npos = str2.find(“可能な”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“おこなう”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“備えた”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“制御を行う”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“有する”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“制限する”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“用いた”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“低減する”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“化する”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“検出する”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“制御する”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“加工する”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“実行する”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“付けられる”)

    if npos>0:

        str2 = str2[npos:]

    npos = str2.find(“の”)

    if npos>0:

        if len(str2[npos+1:])>8:

            str2 = str2[npos+1:]

    str2 = str2.replace(“新規な”, “”)    # “新規な”を削除

    ti_list.append(str1)       

    ti_list_min.append(str2)    

    if len(str2)>nmax: nmax=len(str2)

#  確認

# print(‘発明の略称=’,str(ti_list_min)[0:30] )

print(“発明の略称の最大長さ=”,nmax)

# 出願人名称読み込み

apname_data = pat_data.iloc[:,4]

ap_list =[]

for str1 in apname_data:

    str0 = str1

    ap_list.append(str(str0))

print(apname_data[0])

apmini = (apname_data[0].replace(“株式会社”, “”))    # 「株式会社」を削除

apmini = (apmini.replace(“ホールディングス”, “”))    # 「ホールディングス」を削除

# print(apmini)

file_name = apmini+”課題.xlsx”

# print(file_name)

# 発明者読み込み

name_data = pat_data.iloc[:,5]

name_list =[]

for str1 in name_data:

#    str1 = (str1.replace(“ ”, “_”))    # 空白を「_」に置換

    str0 = str(str1)

    name_list.append(str0)

# IPC読み込み

ipc_data = pat_data.iloc[:,6]

ipc_list =[]

for str1 in ipc_data:

    str0 = str(str1) + ‘;’

    ipc_list.append(str0)

# FI読み込み

fi_data = pat_data.iloc[:,7]

fi_list =[]

for str1 in fi_data:

    str1 = str(str1)

    if len(str1) > 3:

        #データ中の空白を削除

        str1 = (str1.replace(‘        ‘, ‘,’))    # 空白を「,」に置換

        str1 = (str1.replace(‘    ‘, ‘,’))    # 空白を「,」に置換

        str1 = (str1.replace(‘   ‘, ‘,’))    # 空白を「,」に置換

        str1 = (str1.replace(‘   ‘, ‘,’))    # 空白を「,」に置換

        str1 = (str1.replace(‘   ‘, ‘,’))    # 空白を「,」に置換

        str1 = (str1.replace(‘  ‘, ‘,’))    # 「,,」を「,」に置換

        str1 = (str1.replace(‘,,’, ‘,’))    # 「,,」を「,」に置換

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(” “, “”))    # 全角空白を削除

        str0 = str(str1) + ‘;’

        fi_list.append(str0)

    else:

        fi_list.append(‘無し’)

# Fターム読み込み

ft_data = pat_data.iloc[:,8]

ft_list =[]

for str1 in ft_data:

    str1 = str(str1)

    if len(str1) > 3:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str0 = str(str1)    

        ft_list.append(str0)

    else:

        ft_list.append(‘無し’)        

# 要約読み込み

abst_data = pat_data.iloc[:,9]

abst_list =[]

for str1 in abst_data:

    str1 = str(str1)

    if len(str1) > 3:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str1 = (str1.replace(“,”, “”))    # 「,」を「、」に置換

        abst_list.append(str1)

    else:

        abst_list.append(‘無し。’)

# print(‘要約=’,abst_list[0:1])    

print(‘要約=’,str(abst_list)[0:50] )

# 発明の目的読み込み

mokuteki_data = pat_data.iloc[:,10]

mokuteki_list =[]

for str1 in mokuteki_data:

    str0 = str(str1)

    if len(str0) > 3:

        mokuteki_list.append(str0)

    else:

        mokuteki_list.append(‘無し’)    

# print(‘発明の目的=’,mokuteki_list[0:1])

print(‘発明の目的=’,str(mokuteki_list)[0:30] )

# 利用分野

bunya_data = pat_data.iloc[:,11]

bunya_list =[]

for str1 in bunya_data:

    str1 = str(str1)

    if len(str1) > 3:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str1 = (str1.replace(“,”, “”))    # 「,」を「、」に置換

        str1 = (str1.replace(“関する。より詳細には”, “関し、より詳細には”))    # 「,」を「、」に置換

        bunya_list.append(str1)

    else:

        bunya_list.append(‘無し’)

# print(‘利用分野=’,bunya_list[0:1])

print(‘利用分野=’,str(bunya_list)[0:30] )

# 従来の技術

prior_data = pat_data.iloc[:,12]

prior_list =[]

for str1 in prior_data:

    str1 = str(str1)

    if len(str1) > 3:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str1 = (str1.replace(“,”, “”))    # 「,」を「、」に置換

        prior_list.append(str1)

    else:

        prior_list.append(‘無し’)

# print(‘従来の技術=’,prior_list[0:1])

print(‘従来の技術=’,str(prior_list)[0:30] )

# 発明の効果

koka_data = pat_data.iloc[:,13]

koka_list =[]

for str1 in koka_data:

    str1 = str(str1)

    if len(str1) > 3:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str1 = (str1.replace(“,”, “”))    # 「,」を「、」に置換

        koka_list.append(str1)

    else:

        koka_list.append(‘無し’)

# print(‘発明の効果=’,koka_list[0:1])

print(‘発明の効果=’,str(koka_list)[0:30] )

# 課題

kadai_data = pat_data.iloc[:,14]    # 分類コードが無い場合

kadai_list =[]

for str1 in kadai_data:

    str1 = str(str1)

    if len(str1) > 3:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str1 = (str1.replace(“,”, “”))    # 「,」を「、」に置換

        str1 = (str1.replace(“提供される。そのような”, “提供され、そのような”))    # 置換

        kadai_list.append(str1)

    else:

        kadai_list.append(‘無し’)

# print(‘課題=’,kadai_list[0:1])

print(‘課題=’,str(kadai_list)[0:30] )

print(“”)

print(“書誌データを読み込みました”)

claim_data = pat_data.iloc[:,15]

claim_list =[]

ybcl_list=[]

for n1,str1 in enumerate(claim_data):

    str1 = str(str1)

    if len(str1) > 3:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str1 = (str1.replace(“,”, “、”))    # 「,」を「、」に置換

        str1 = str1.replace(“【請求項1】”,””)

        str1 = str1.replace(“【請求項1】”,””)

        npos = str1.find(“【請求項”)    # 請求項1以外をカット        

        if npos > 0: str1= str1[0:npos]

        claim_list.append(str1)

    else:

        claim_list.append(‘無し’)

    bstr1=str1

# 要約中の不要文字を除去

abst_list01 = []

for str1 in abst_list: 

    # 不要文字を削除 a-z、a-z、A-Z、A-Z、0-9、0-9

    str1 = (str1.replace(“(57)”, “”))

    str1 = (str1.replace(“【要約】”, “”))

    str1 = (str1.replace(“(修正有)”, “”))

    str1 = (str1.replace(“【課題】”, “”))

    str1 = (str1.replace(“【解決手段】”, “”))

    str1 = (str1.replace(“【選択図】”, “”))

    str1 = re.sub(r'[:;/+\.「」]’, ”, str1)   # 記号

    str1 = (str1.replace(“(“, “”))

    str1 = (str1.replace(“)”, “”))

    str1 = (str1.replace(“()”, “”))

    str1 = (str1.replace(“[“, “”))

    str1 = (str1.replace(“]”, “”))   

    str1 =str1[:-1]  # 右端の削除

    # 分割したデータを追加

    abst_list01.append(str1)

# print(‘要約=’,abst_list01[0:1])

print(‘要約=’,str(abst_list01)[0:30] )

# 利用分野中の不要文字を除去

bunya_list01 = []

for str1 in bunya_list: 

    # 不要文字を削除 a-z、a-z、A-Z、A-Z、0-9、0-9

    str1 = (str1.replace(“【技術分野】”, “”))

    str1 = re.sub(r'[:;/+\.「」]’, ”, str1)   # 記号

    str1 = (str1.replace(“(“, “”))

    str1 = (str1.replace(“)”, “”))

    str1 = (str1.replace(“()”, “”))

    str1 = (str1.replace(“[“, “”))

    str1 = (str1.replace(“]”, “”))   

    str1 = (str1.replace(“【】”, “”))  

    # 分割したデータを追加

    bunya_list01.append(str1)

# print(‘利用分野=’,bunya_list01[0:1])

print(‘利用分野=’,str(bunya_list01)[0:30] )

# 従来の技術中の不要文字を除去

prior_list01 = []

for str1 in prior_list: 

    # 不要文字を削除 a-z、a-z、A-Z、A-Z、0-9、0-9

    str1 = (str1.replace(“【技術分野】”, “”))

    str1 = (str1.replace(“(技術分野)”, “”))

    str1 = (str1.replace(“(発明の分野)”, “”))

    str1 = (str1.replace(“〔発明の技術分野〕”, “”))    

    str1 = (str1.replace(“【背景技術】”, “”))

    str1 = re.sub(r'[:;/+\.「」]’, ”, str1)   # 記号

    str1 = (str1.replace(“(“, “”))

    str1 = (str1.replace(“)”, “”))

    str1 = (str1.replace(“()”, “”))

    str1 = (str1.replace(“[“, “”))

    str1 = (str1.replace(“]”, “”))   

    str1 = (str1.replace(“【】”, “”))  

    # 分割したデータを追加

    prior_list01.append(str1)

# print(‘従来の技術=’,prior_list01[0:1])

print(‘従来の技術=’,str(prior_list01)[0:30] )

# 発明の効果中の不要文字を除去

koka_list01 = []

for str1 in koka_list: 

    # 不要文字を削除 a-z、a-z、A-Z、A-Z、0-9、0-9

    str1 = (str1.replace(“【発明の効果】”, “”))

    str1 = (str1.replace(“【効果】”, “”))

    str1 = (str1.replace(“[発明の効果]”, “”))

    str1 = re.sub(r'[:;/+\.「」]’, ”, str1)   # 記号

    str1 = (str1.replace(“(“, “”))

    str1 = (str1.replace(“)”, “”))

    str1 = (str1.replace(“()”, “”))

    str1 = (str1.replace(“[“, “”))

    str1 = (str1.replace(“]”, “”))   

    str1 = (str1.replace(“【】”, “”))  

    # 分割したデータを追加

    koka_list01.append(str1)

# print(‘発明の効果=’,koka_list01[0:1])

print(‘発明の効果=’,str(koka_list01)[0:30] )

# 課題中の不要文字を除去

kadai_list01 = []

for str1 in kadai_list: 

    # 不要文字を削除 a-z、a-z、A-Z、A-Z、0-9、0-9

    str1 = (str1.replace(“【発明が解決しようとする課題】”, “”))

    str1 = (str1.replace(“(発明が解決しようとする課題)”, “”))

    str1 = re.sub(r'[:;/+\.「」]’, ”, str1)   # 記号

    str1 = (str1.replace(“(“, “”))

    str1 = (str1.replace(“)”, “”))

    str1 = (str1.replace(“()”, “”))

    str1 = (str1.replace(“[“, “”))

    str1 = (str1.replace(“]”, “”))   

    str1 = (str1.replace(“【】”, “”))  

    # 分割したデータを追加

    kadai_list01.append(str1)

# print(‘課題=’,kadai_list01[0:1])

print(‘課題=’,str(kadai_list01)[0:30] )

# 本発明などを含む単文を抽出

# パターン11のKW読込み/これ以降から次の「。」までが対象

ptn11_list = [“本発明”, “本願発明”, “この発明”, “本件発明”, “本願”, “請求項”, “本開示”, 

         “本明細書”, “本開示”, “本案”, “本方法”, “発明によれば”, “本明細書”, “本技術”, 

         “本件の目的”, “本出願”, “発明によれば”, ” 目的は”, “一つの側面では”, 

        “本技術”, “本教示”, “態様によれば”, “問題に鑑み”, “構成によれば”, 

         “この出願”, “目的とするところは”, “本実施形態によれば”, “これらの発明”, “本件開示”, 

         “請求項”, “実施例”, “実施形態”,”効果”,”図ることができる”,”解決しようとする課題は”,

            “さらに詳しくは”,”記載の発明”,”より詳細には”,”この開示”,”開示される1つの目的”,

             “開示された技術”,”実施の形態によれば”]

# print(‘ptn11=’,len(ptn11_list),’件’)

# print(‘ptn11=’,ptn11_list)

# 今は未使用(パターン12のKW読込み/これ以降から次の「。」までが対象)

ptn12_list = [“そのため”, “このような”, “また、”, “特に”, “そうすることにより”, “これによって”, 

         “それにより”, “更に”, “即ち、”, “従って”,”その結果”, “すなわち”, “それ故”, “したがって”, 

         “そうすることで”, “詳細には”, “態様によれば”, “構成によれば”, “この結果”, “これにより”, 

        “しかも”, “これによれば”, “態様によれば”, “よって、”, “このような”, “加えて”, “さらに”, 

         “。また”,”そこで、”]

# print(‘ptn12=’,len(ptn12_list),’件’)

# print(‘ptn12=’,ptn12_list)

# 今は未使用(パターン13のKW読込み/要約が対象)

ptn13_list = [“発明”, “これにより”, “これによれば”, “これによって”, “その結果”, “この結果”, 

         “構成によれば”, “この構成によ”, “したがって”]

# print(‘ptn13=’,len(ptn13_list),’件’)

# print(‘ptn13=’,ptn13_list)

# ヒットリストを初期化

hit_list = []

for str1 in kadai_list01:

    hit_list.append(”)

for n1, str11 in enumerate(kadai_list01):    # 「課題」欄から抽出

#    print(n1,str11)

    btxt = ”

    flg01 = 0    

    split_str11 = str11.split(‘。’)    # 単文に分割

    for n2, str12 in enumerate(split_str11):    # str12=課題単文

        for str13 in ptn11_list:                             # str13=本発明など

            if str13 in str12:                

                if str12 not in btxt:

                    if btxt == ”:

                        btxt = str12

                    else:

                        btxt = btxt + ‘。’ + str12

        #  同じn1で「発明の効果」欄から抽出して追加

            str21 = koka_list01[n1]

            split_str21 = str21.split(‘。’)   # 単文に分割

            for n2, str22 in enumerate(split_str21):    # str22=発明の効果単文

                for str23 in ptn11_list:                             # str23= 本発明など

                    if str23 in str22:

                        if str22 not in btxt:

                            if btxt == ”:

                                btxt = str22

                            else:

                                btxt = btxt + ‘。’ + str22

            # 同じn1で「要約」欄から抽出して追加

            str31 = abst_list01[n1]

            split_str31 = str31.split(‘。’)   # 単文に分割

            bstr31 =split_str31[0]    # 先頭の単文を追加

            if bstr31 not in btxt:                            

                if btxt == ”:

                    btxt = bstr31

                else:

                    btxt = btxt + ‘。’ + bstr31

            for n2, str32 in enumerate(split_str31):    # str32=要約単文

                for str33 in ptn11_list:                             # str33= 本発明など

                    if str33 in str32:

                        if str32 not in btxt:                            

                            if btxt == ”:

                                btxt = str32

                            else:

                                btxt = btxt + ‘。’ + str32

            # 同じn1で「利用分野」欄から抽出して追加

            str41 = bunya_list01[n1]            

            split_str41 = str41.split(‘。’) # 単文に分割

            for n2, str42 in enumerate(split_str41):    # str42=利用分野」単文

                for str43 in ptn11_list:                             # ptn11_list= 本発明など            

                    if str43 in str42:

                        if str42 not in btxt:

                            if btxt == ”:

                                btxt = str42

                            else:

                                btxt = btxt + ‘。’ + str42

        # 同じn1で「「発明の名称」欄から抽出して追加

        str51 = ti_list[n1]

        if str51 not in btxt:

            if btxt == ”:

                btxt = str51

            else:

                btxt = btxt + ‘。’ + str51

        # 同じn1で「「従来の技術」欄から抽出して追加 prior_list

            str61 = prior_list[n1]

            split_str61 = str61.split(‘。’)           

            for n2, str62 in enumerate(split_str61):    

                for str63 in ptn11_list:

                    if str63 in str62:

                        if str62 not in btxt:                            

                            if btxt == ”:

                                btxt = str62

                            else:

                                btxt = btxt + ‘。’ + str62   

        # n1の抽出結果をヒットリストに追記

        if btxt != ”:

            hit_list[n1] = btxt

print(len(hit_list))

# print(‘hit_list=’,hit_list[0:1])

# print(‘hit_list=’,hit_list[0:10])

# DataFrame化

df01 = pd.DataFrame(data=pn_list, columns=[‘公報番号’])

df02 = pd.DataFrame(data=an_list, columns=[‘出願番号’])

df03 = pd.DataFrame(data=pd_list, columns=[‘発行日’])

df04 = pd.DataFrame(data=ti_list, columns=[‘発明の名称’])

df05 = pd.DataFrame(data=ap_list, columns=[‘出願人’])

df06 = pd.DataFrame(data=name_list, columns=[‘発明者’])

df07 = pd.DataFrame(data=ipc_list, columns=[‘IPC’])

df08 = pd.DataFrame(data=fi_list, columns=[‘FI’])

df09 = pd.DataFrame(data=ft_list, columns=[‘Fターム’])

df10 = pd.DataFrame(data=abst_list01, columns=[‘要約’])

df11 = pd.DataFrame(data=mokuteki_list, columns=[‘発明の目的’])

df12 = pd.DataFrame(data=bunya_list01, columns=[‘利用分野’])

df13 = pd.DataFrame(data=prior_list01, columns=[‘従来の技術’])

df14 = pd.DataFrame(data=koka_list01, columns=[‘発明の効果’])

df15 = pd.DataFrame(data=kadai_list01, columns=[‘課題’])

# 結合

df20=pd.concat([df01, df02, df03, df04, df05, df06, df07, df08, df09, 

                df10,df11,df12,df13,df14,df15], axis=1)

print(len(df20))

# print(df20[0:1])

print(“不要文字を除去し、本発明などを含む単文を抽出しました”)

# step4コード付与

## ヒットリストの単文中に課題KW01~KW03が含まれていれば、課題語とコードを付与する

### ヒットリストとは、課題を含むと判定された文(「。」の次から「。」まで)を公報ごとにまとめたもの。

## 課題KWに+が付加(例:低減+)されていれば、補助KWと照合する

## KW表のデータ量を削減するために、”に関” と“を提”“に提”に統一し、

##”に関” が有れば“を提”もテストすることとした

### str3の末尾2文字が “に関” であれば、str2に “を提”を含んでいるかを調べ、

### str2に”を提”が含まれていれば、str3の末尾2文字(“に関” )を”を提”に変更する

# 元の語句1をテスト

n=0

word02_list = []

code02_list = []

for n1, str1 in enumerate(hit_list):

    mod=(n1+1) % 1000

    # if mod==0: print(str(n1+1),”件 処理ずみ”)    # 1000件毎に件数を表示    

    if mod==0: 

        strn1=str(n1+1) + “件”

        print(strn1,”処理ずみ”)    # 1000件毎に件数を表示

    wd01 = “”

    cd01 = “”

    if str1[-1] != “。”: str1= str1+”。”    # 文末が”。”で無ければ”。”を付加

    # print(n1,str1)

    nkw01_list=[]

    bstr1=str1

    split_str1 = str1.split(“。”)    # “。”で分割して単文化

    for n2,str2 in enumerate(split_str1):

        # 確認

        flg01=0

        for n3, str3 in enumerate(kw01_list):    # 追加KW表で照合テスト

            if str(code01_list[n3])==”nan”: code01_list[n3]=”Z99Z”

            if str(str3) == “nan”: str3=”notstr”

            # 元の語句1をテスト

            if str3 in str2:                       # kw01を含んでいれば追加KW表のNoをリスト化

                flg01=1                    

                str02 = kw02_list[n3]      # kw02読み込み

                if str(str02) == “nan”:       # kw02が無ければ

                    #  元の語句1のみで書き込み

                    if wd01 == “”:

                        wd01 = word01_list[n3]    # 課題語読み込み(kw01とkw02とkw03)

                        cd01 = code01_list[n3]

                    else:

                        if code01_list[n3] not in cd01:    # 同一コードおよび上位コードは追加せず

                            if str(wd01) == “nan”: wd01=””

                            if str(word01_list[n3]) == “nan”: word01_list[n3]=””

                            wd01 = wd01+”;”+ word01_list[n3]    # 課題語読み込み(kw01のみ)

                            cd01 = cd01+”;”+ code01_list[n3]

                    # 確認

                    # print(“05:kw01のみ=”,wd01,cd01)

                    nkw01_list.append(n3)

                    n=n+1

                # 元の語句2をテスト

                if flg01==1:

                    str02 = kw02_list[n3]      # kw02読み込み

                    if str(str02) == “nan”:       # kw02が無ければ

                        if wd01 == “”:

                            wd01 = word01_list[n3]    # 課題語読み込み(kw01とkw02とkw03)

                            cd01 = code01_list[n3]

                        else:

                            if code01_list[n3] not in cd01:

                                if str(wd01) == “nan”: wd01=””

                                if str(word01_list[n3]) == “nan”: word01_list[n3]=””

                                wd01 = wd01+”;”+ word01_list[n3]    # 課題語読み込み(kw01のみ)

                                cd01 = cd01+”;”+ code01_list[n3]

                        # 確認

                        # print(“05:kw01のみ=”,wd01,cd01)

                    else:     # kw02が有り

                        if str02[-1] != ‘+’:    # 末尾が ‘+’でなく

                            if str02 in str2:    # kw02を含んでおり

                                str03 = kw03_list[n3]    # kw03読み込み

                                if str(str03) == “nan”:      # kw03が無ければ

                                    if wd01 == “”:

                                        wd01 = word01_list[n3]    # 課題語読み込み(kw01とkw02とkw03)

                                        cd01 = code01_list[n3]

                                    else:

                                        if code01_list[n3] not in cd01:

                                            if str(word01_list[n3]) == “nan”: word01_list[n3]=””

                                            wd01 = wd01+”;”+ word01_list[n3]    # 課題語読み込み(kw01とkw02とkw03)

                                            cd01 = cd01+”;”+ code01_list[n3]

                                            # 確認

                                            # print(“20:”,n2,”kw01とkw021=”,wd01,cd01)                                        

                                # 元の語句3をテスト

                                else:      # kw03が有れば

                                    if str03 in str2:

                                        if wd01 == ”:

                                            if code01_list[n3] not in cd01:

                                                if str(word01_list[n3]) == “nan”: word01_list[n3]=””

                                                wd01 = word01_list[n3]    # 課題語読み込み(kw01とkw02とkw03)

                                                cd01 = code01_list[n3]

                                                # 確認

                                                # print(“23:”,n2,”kw01とkw022とkw032=”,wd01,cd01)

                                        else:

                                            if code01_list[n3] not in cd01:

                                                if str(word01_list[n3]) == “nan”: word01_list[n3]=””

                                                wd01 = wd01 + ‘;’ + word01_list[n3]    # 課題語読み込み(kw01とkw02とkw03)

                                                cd01 = cd01 +  ‘;’ + code01_list[n3]                        

                                                # 確認

                                                # print(“24:”,n2,”kw01とkw022とkw032=”,wd01,cd01)

                        if str02[-1] == ‘+’:    # KW2の末尾が ‘+’ならば

                            # 確認

                            # print(“06:末尾が+: “,str3,str02)

                            bname = str02

                            for str021 in hojokw_data[bname]:                        

                                if str(str021) != ‘nan’:

                                    if str021 in str2:    # 補助KWを含んでいれば

                                        np01=str2.find(str3)

                                        np02=str2.find(str021)    # str021の位置

                                        # 確認

                                        # if np02>0: print(“np01=”,np01,”np02=”,np02,”,len(str3)”,len(str3))

                                        str03 = kw03_list[n3]    # kw03読み込み

                                        if str(str03) == ‘nan’:      # kw03が無ければ                                        

                                            if abs(np02-np01)<(len(str3)+15):    # 15文字以内ならば

                                                if str(word01_list[n3]) == “nan”: 

                                                    word01_list[n3]=””

                                                else:

                                                    if word01_list[n3] not in wd01:

                                                        wd01 =  wd01+”;”+ word01_list[n3]    # 課題語読み込み(kw01とkw02)

                                                        cd01 =   cd01+”;”+ code01_list[n3]     

                                                        # 確認

                                                        # print(“081:kw01とkw021+=”,wd01,cd01)

                                                        break

                                            else:

                                                np011=str2.find(str3,np01+1)    # str1の位置                                         

                                                if abs(np02-np011)<(len(str3)+15):    # 15文字以内ならば

                                                    if str(word01_list[n3]) == “nan”: 

                                                        word01_list[n3]=””

                                                    else:

                                                        if word01_list[n3] not in wd01:

                                                            wd01 =  wd01+”;”+ word01_list[n3]    # 課題語読み込み(kw01とkw02)

                                                            cd01 =   cd01+”;”+ code01_list[n3]     

                                                            # 確認

                                                            # print(“083:kw01とkw021+=”,wd01,cd01)

                                                            break                                                    

                                            if word01_list[n3] not in wd01:

                                                if np01>=0:

                                                        if np02>=0:

                                                            if abs(np02-np01)>0:

                                                                if abs(np02-np01)<(len(str3)+15):    # 15文字以内ならば

                                                                    if wd01 == ”:    # wd01が無ければ      

                                                                        if code01_list[n3] not in cd01:

                                                                            wd01 =  wd01+”;”+ word01_list[n3]    # 課題語読み込み(kw01とkw02)

                                                                            cd01 =   cd01+”;”+ code01_list[n3]     

                                                                            # 確認

                                                                            # print(“12:kw01とkw021+=”,wd01,cd01)

                                                                    else:    # wd01が有ればwd01を追加

                                                                        if code01_list[n3] not in wd01:

                                                                            wd01 = wd01 + ‘;’ + word01_list[n3]    # 課題語読み込み(kw01とkw02)

                                                                            cd01 = cd01 +  ‘;’ + code01_list[n3]

                                                                            # 確認

                                                                            # print(“13:kw01とkw022+=”,wd01,cd01)      

                                        else:   # KW2の末尾が ‘+’でkw03が有り

                                            if str03 in str2:

                                                if np01>=0:

                                                        if np02>=0:

                                                            if abs(np02-np01)>0:

                                                                if (np02-np01)<(len(str3)+10):

                                                                    if wd01 == ”:    # wd01が無ければ

                                                                        if str(word01_list[n3]) == “nan”: word01_list[n3]=””

                                                                        if code01_list[n3] not in cd01:

                                                                            wd01 =  wd01+”;”+ word01_list[n3]    # 課題語読み込み(kw01とkw02とkw03)

                                                                            cd01 =  cd01+”;”+ code01_list[n3]      

                                                                            # 確認

                                                                            # print(“17:kw01とkw022+とkw031=”,wd01,cd01)  

                                                                    else:    # wd01が有ればwd01を追加

                                                                        if str(word01_list[n3]) == “nan”: word01_list[n3]=””

                                                                        if code01_list[n3] not in cd01:

                                                                            if str(word01_list[n3]) == “nan”: word01_list[n3]=””

                                                                            wd01 = wd01 + ‘;’ + word01_list[n3]    # 課題語読み込み(kw01とkw02とkw03)

                                                                            cd01 = cd01 +  ‘;’ + code01_list[n3]

                                                                            # 確認

                                                                            # print(“18:kw01とkw022+とkw032=”,wd01,cd01)

    # print(n1,wd01,cd01)

    if str(wd01) != “”:

        if wd01[0]==”;”: wd01 =wd01[1:]

        if cd01[0]==”;”: cd01 =cd01[1:]

    else:

        wd01 = “不明”

        cd01 = “Z99Z”

    if “Z99Z;” in str(cd01): cd01 = (cd01.replace(“Z99Z”, “”))

    # print(“まとめn1=”,n1,wd01,cd01)

    word02_list.append(wd01)

    code02_list.append(cd01)

# 確認

# print(len(code02_list))

print(‘課題コード=’,code02_list[0:1])

print(‘課題KW=’,word02_list[0:1])

# DataFrame化

df16 = pd.DataFrame(data=code02_list, columns=[‘課題コード’])

df17 = pd.DataFrame(data=word02_list, columns=[‘課題KW’])

# 横に結合

df30 =pd.concat([df20,df16, df17], axis=1)

# print(len(df30),’件’)

# print(df30[0:1])

# Excelとして書き出す前準備

# dataframeをarrayに変換

arr1 = df30.values

#  旧データクリア(「.xlsx」を新規作成し、旧データをクリア)

# ブックを作成

book = openpyxl.Workbook()

file_name = apmini + “課題.xlsx”    # 会社略称+課題

# シートを追加

ws = book.create_sheet(title=’書誌・課題’)

# 不要な「Sheet」を削除

del book[‘Sheet’]

# 保存

book.save(file_name)

# file_nameを開く

wb = openpyxl.load_workbook(file_name)

# Exce(xlsx)に書き出し

# ヘッダ作成

header_list =[[‘公報番号’,’出願番号’,’発行日’,’発明の名称’,’出願人’,’発明者’,’IPC’,’FI’,’Fターム’,

               ‘要約’,’発明の目的’,’利用分野’,’従来の技術’,’発明の効果’,’課題’,’課題コード’,’課題KW’]]

def write_list_1d(sheet, l_1d, start_row, start_col):

    for y, row in enumerate(l_1d):

        for x, cell in enumerate(row):

            sheet.cell(row=start_row + y,

                       column=start_col + x,

                       value=l_1d[y][x])

sheet = wb[‘書誌・課題’]

write_list_1d(sheet, header_list, 1, 1)    # ヘッダを1行目1列目に書き込み

write_list_1d(sheet, arr1, 2, 1)    # シート名「sheet」の1行目1列目からarr1の内容を書き込み

wb.save(file_name)                     # ファイル「file_name」に保存

print(“”)

print(file_name + ‘のシート「書誌・課題」に課題と課題コードを書き出しました’) 

# step5 課題コードの上位コード削除

# 降順課題データ読み込み

kw_data = pd.read_excel(“降順課題コード表.xlsx”,sheet_name=”課題KW表”) 

kw_data = kw_data.dropna(how=”all”)    # 全列がNaNである行を削除

print(‘件数=’,len(kw_data))

# 課題と課題コード読み込み

new_kw_data = kw_data.iloc[:,4]    # new課題

new_cd_data = kw_data.iloc[:,5]    # new課題コード

# リスト化

newwd_list =[]

for str1 in new_kw_data:

    newwd_list.append(str(str1))

print(“newwd_list=”,newwd_list[0:5])

newcd_list =[]

for str1 in new_cd_data:

    newcd_list.append(str(str1))

print(“newcd_list=”,newcd_list[0:5])

# 上位コードを削除

cd_list = []

for str1 in code02_list:

    # 降順にソート

    str1_split = str1.split(‘;’)    # 「;」で分割

    str1_split.sort(reverse=True)

    bcd2 = “”

    for str2 in str1_split:

        if str2 not in bcd2:    # 同一コードおよび上位コードは追加せず

            if bcd2 == “”:

                bcd2 = str2

            else:

                bcd2 = bcd2 + “;” + str2

    # 昇順にソート

    bcd_split = bcd2.split(‘;’)    # 「;」で分割  

    bcd_split.sort()

    bcd3 = “”

    for str3 in bcd_split:

        if bcd3 == “”:

            bcd3 = str3

        else:

            bcd3 = bcd3 + “;” + str3  

    cd_list.append(bcd3)

# print(len(cd_list))

print(“len(cd_list)=”,len(cd_list))

print(“cd_list=”,cd_list[0:1])

# 修正後の課題コードにあわせて課題を修正

wd_list = []

for n1, str1 in enumerate(code02_list):

    str1_split = str1.split(‘;’)    # 「;」で分割

    bwd = “”

    for n2, str2 in enumerate(str1_split):

        for n3, str3 in enumerate(newcd_list):

            if str3 == str2:

                if bwd == “”:

                    bwd = newwd_list[n3]

                else:

                    bwd = bwd + “;” + newwd_list[n3]

    wd_list.append(bwd)

# print(len(wd_list))

print(“len(wd_list)=”,len(wd_list))

print(“wd_list=”,wd_list[0:5])

# DataFrame化

df16 = pd.DataFrame(data=cd_list, columns=[‘課題コード’])

df17 = pd.DataFrame(data=wd_list, columns=[‘課題KW’])

# 横に結合

df30 =pd.concat([df20,df16, df17], axis=1)

# print(len(df20),’件’)

# print(df30[0:1])

print(“課題コードの上位コードを削除しました”)

# Excelとして書き出す前準備

# dataframeをarrayに変換

arr1 = df30.values

#  旧データクリア(「.xlsx」を新規作成し、旧データをクリア)

# ブックを作成

book = openpyxl.Workbook()

file_name = apmini + “課題.xlsx”    # 会社略称+課題

# シートを追加

ws = book.create_sheet(title=’書誌・課題’)

# 不要な「Sheet」を削除

del book[‘Sheet’]

# 保存

book.save(file_name)

# file_nameを開く

wb = openpyxl.load_workbook(file_name)

# Exce(xlsx)に書き出し

# ヘッダ作成

header_list =[[‘公報番号’,’出願番号’,’発行日’,’発明の名称’,’出願人’,’発明者’,’IPC’,’FI’,’Fターム’,

               ‘要約’,’発明の目的’,’利用分野’,’従来の技術’,’発明の効果’,’課題’,’課題コード’,’課題KW’]]

def write_list_1d(sheet, l_1d, start_row, start_col):

    for y, row in enumerate(l_1d):

        for x, cell in enumerate(row):

            sheet.cell(row=start_row + y,

                       column=start_col + x,

                       value=l_1d[y][x])

sheet = wb[‘書誌・課題’]

write_list_1d(sheet, header_list, 1, 1)    # ヘッダを1行目1列目に書き込み

write_list_1d(sheet, arr1, 2, 1)    # シート名「sheet」の1行目1列目からarr1の内容を書き込み

wb.save(file_name)                     # ファイル「file_name」に保存

print(“”)

print(file_name + ‘のシート「書誌・課題」に課題と課題コードを書き出しました’) 

# stop

# 課題抽出は完了

# 以下は主要構成抽出

# step6 請求項1の切り出し、文節

# 公報データ読み込み

pat_data = pd.read_excel(‘課題分析公報.xlsx’,sheet_name=’母集合’) 

pat_data = pat_data.dropna(how=’all’)    # 全列がNaNである行を削除

print(‘公報件数=’,len(pat_data))

claim_data = pat_data.iloc[:,15]

claim_list =[]

ybcl_list=[]

for n1,str1 in enumerate(claim_data):

    str1 = str(str1)

    if len(str1) > 3:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str1 = (str1.replace(“,”, “、”))    # 「,」を「、」に置換

        str1 = str1.replace(“【請求項1】”,””)

        str1 = str1.replace(“【請求項1】”,””)

        npos = str1.find(“【請求項”)    # 請求項1以外をカット        

        if npos > 0: str1= str1[0:npos]

        claim_list.append(str1)

    else:

        claim_list.append(‘無し’)

    bstr1=str1

    # DataFrame化

    df18 = pd.DataFrame(data=claim_list, columns=[‘請求項1’])

    # 文節して修正 

    flg=0        

    if “ことを特徴とする。” not in bstr1:

        bstr1 = bstr1.replace(“ことを特徴とする”,”;、ことを特徴とする”)

    bstr1 = bstr1.replace(“ことを特徴とした”,”;、ことを特徴とした”)

    bstr1 = bstr1.replace(“とを備えて成る”,”;、とを備えて成る”)

    bstr1 = bstr1.replace(“において、”,”において、;”)  

    bstr1 = bstr1.replace(“工程において、;”,”工程において”)

    bstr1 = bstr1.replace(“工程とを含む”,”工程とを含む;”)

    bstr1 = bstr1.replace(“工程と、”,”工程と、;”)  

    bstr1 = bstr1.replace(“工程2と:”,”工程2と:;”)    

    bstr1 = bstr1.replace(“工程と、;を少なくとも有し”,”工程とを少なくとも有し;”)  

    # 「工程(a)と、」で改行

    np01=bstr1.find(“工程(”)

    if np01>0:

        if bstr1[np01+4]==”)”:

            bstr1=bstr1[0:np01+5]+”、;”+bstr1[np01+5:]

    # 修正

    bstr1 = bstr1.replace(“位置であって、且つ”,”位置であって且つ”) 

    bstr1 = bstr1.replace(“であって、”,”であって、;”)    

    bstr1 = bstr1.replace(“一部であって、;”,”一部であって”)     # “であって、;”から”;”を除去

    bstr1 = bstr1.replace(“とを含有し”,”とを含有し、;”)    

    bstr1 = bstr1.replace(“とを含み、”,”とを含み、;”)     

    bstr1 = bstr1.replace(“と、を有し”,”とを有し”)     # “とを有し”に置換してから次行で”;”を追加

    bstr1 = bstr1.replace(“を有してなり、”,”を有してなり、;”)

    bstr1 = bstr1.replace(“を有しており、”,”を有しており、;”)

    bstr1 = bstr1.replace(“を少なくとも含有し、”,”を少なくとも含有し、;”)    

    bstr1 = bstr1.replace(“備えており、”,”備えており、;”) 

    bstr1 = bstr1.replace(“備えてなり、”,”備えてなり、;”) 

    bstr1 = bstr1.replace(“を備え、”,”を備え、;”) 

    bstr1 = bstr1.replace(“を具備し、”,”を具備し、;”)     

    bstr1 = bstr1.replace(“を少なくとも備え、”,”を少なくとも備え、;”) 

    flg=0

    if “(”  in bstr1: flg=1

    if “組成物”  in bstr1: flg=1

    if “以下であり”  in bstr1: flg=1

    if “%であり”  in bstr1: flg=1

    if flg==0:

        bstr1 = bstr1.replace(“であり、”,”であり、;”) 

        # print(n1,bstr1)

    bstr1 = bstr1.replace(“組成物であり、”,”組成物であり、;”)     

    bstr1 = bstr1.replace(“させ、次いで、”,”させ次いで、”) 

    bstr1 = bstr1.replace(“させ、”,”させ、;”)     

    bstr1 = bstr1.replace(“形成し、”,”形成し、;”)     

    bstr1 = bstr1.replace(“設けられており、”,”設けられており、;”) 

    bstr1 = bstr1.replace(“設けられ、”,”設けられ、;”)     

    bstr1 = bstr1.replace(“面に設けられ、;”,”面に設けられ”)    # 「面に設けられ」を改行無しに戻す

    bstr1 = bstr1.replace(“並べられており”,”並べられており、;”) 

    bstr1 = bstr1.replace(“法であって”,”法であって、;”) 

    bstr1 = bstr1.replace(“それぞれ有し、”,”それぞれ有し、;”) 

    bstr1 = bstr1.replace(“し、この”,”し、;この、”) 

    bstr1 = bstr1.replace(“構成されていて、当該”,”構成されていて;当該”) 

    bstr1 = bstr1.replace(“構成されるとともに、”,”構成されるとともに、;”) 

    if “を設け” in bstr1:

        np01= str1.find(“を設け”) 

        np02=str1.find(“は”,np01) 

        if np02>0:

            np03=str1.find(“とを含み”,np02) 

            if np03>0:

                if (np02-np01)<10:

                    bstr1 = bstr1[0:np01+len(“を設け”)]+”を設け、;”+bstr1[np01+len(“を設け”)+len(“を設け、”):]

    np10=bstr1.find(“【化”)

    if np10>2:

        if bstr1[np10-1]!=”、”:

            if bstr1[np10-1]!=”。”:

                bstr1=bstr1[0:np10]+”。”+bstr1[np10:]

    bstr1 = bstr1.replace(“。【化”,”。;【化”) 

    bstr1 = bstr1.replace(“。式”,”。;式”)     

    np01= bstr1.find(“下記一般式”) 

    np02= bstr1.find(“組成物。”,np01) 

    if np01>0:

        if np02>0:

            if (np02-np01)<100:

                bstr1 = bstr1.replace(“組成物。”,”組成物。;”)    

    np01= bstr1.find(“下記条件式”) 

    np02= bstr1.find(“。”,np01) 

    if np01>0:

        if np02>0:

            if (np02-np01)<100:

                bstr1 = bstr1.replace(“。”,”。;”) 

    np01= bstr1.find(“下記の数式”) 

    np02= bstr1.find(“。”,np01) 

    if np01>0:

        if np02>0:

            if (np02-np01)<100:

                bstr1 = bstr1.replace(“。”,”。;”) 

    np01= bstr1.find(“下記式”) 

    np02= bstr1.find(“。”,np01) 

    if np01>0:

        if np02>0:

            if np01<100:

                if (np02-np01)<100:

                    bstr1 = bstr1.replace(“。”,”。;”)

    bstr1 = bstr1.replace(“と、を”,”とを”)  

    bstr1 = bstr1.replace(“と、が”,”とが”)     

    bstr1 = bstr1.replace(“が、”,”が”) 

    bstr1 = bstr1.replace(“に、”,”に”)     

    bstr1 = bstr1.replace(“と、それと”,”とそれと”)

    bstr1 = bstr1.replace(“を有し、その”,”を有しその”)

    bstr1 = bstr1.replace(“し、この”,”しこの”)

    bstr1 = bstr1.replace(“し、;この”,”しこの”)        

    bstr1 = bstr1.replace(“すると、”,”すると”) 

    bstr1 = bstr1.replace(“行われないと、”,”行われないと”) 

    bstr1 = bstr1.replace(“へこませると、”,”へこませると”) 

    bstr1 = bstr1.replace(“なると、”,”なると”) 

    bstr1 = bstr1.replace(“間であって、”,”間であって”)         

    bstr1 = bstr1.replace(“と、”,”と、;”) 

    split_bstr1 = bstr1.split(“;”)    # 単文に分割

    bstr2=[]

    for n2,str2 in enumerate(split_bstr1):      

        bstr2.append(str2)

    ybcl_list.append(bstr2)

# print(“ybcl_list=”,ybcl_list[1])

# 工程

claim01_list=[]

for n1,str1 in enumerate(ybcl_list):

    n3=0

    ct01=str(str1).count(“工程”)                       

    nstr1=len(str1)

    bcl=””

    bstr2=””

    for n2,str2 in enumerate(str1):

        flg=0

        bn=0

        if ct01>=2:                 

            if len(str2[-3:])>0:

                if str2[-3:]==”させ、”:                             

                    if len(str1[n2+1][-4:])>0:

                        if str1[n2+1][-4:]==”工程と、”:

                            bstr2=str2[0:len(str2)-1]+str1[n2+1][0:len(str1[n2+1])-1]

                            flg=1

        # 工程と・・・工程と

        if ct01>=2:

            if “工程と” not in str2:

                if n2<(len(str1)-1):

                    if str1[n2+1] != “”:

                        if “工程と” in str1[n2+1]:

                            str2= str2.replace(“、”,””) 

                            str1[n2+1]=str1[n2+1].replace(“、”,””)

                            if len(str1[n2+1])>0:

                                bstr2=str2+str1[n2+1]

                                # print(“(工程と・・・工程と)”,n1,bstr2)

                                flg=1

        # と、・・・と、・・・と、・・・工程と、

        if ct01>=2:                       

            if len(str2[-2:])>0:

                if str2[-2:]==”と、”:                    

                    if len(str1[n2+1][-2:])>0:

                        if str1[n2+1][-2:]==”と、”:                            

                            if len(str1[n2+2][-2:])>0:

                                if str1[n2+2][-2:]==”と、”:                            

                                    if len(str1[n2+3][-4:])>0:

                                        if str1[n2+3][-4:]==”工程と、”:

                                            bstr2=str2[0:len(str2)-1]+str1[n2+1][0:len(str1[n2+1])-1]+ str1[n2+2][0:len(str1[n2+2])-1]+str1[n2+3][0:len(str1[n2+3])]

                                            # print(“(と、・・・と、・・・と・・・工程と)”,n1,bstr2)

                                            flg=1      

        # 「(2)工程」と次行の「(1)により」とを接続

        if ct01>=2:

            if “)工程” in str2:

                if n2<(len(str1)-1):

                    if str1[n2+1] != “”:

                        if “により” in str1[n2+1]:

                            if str1[n2+1][3:6]==”により”:

                                bstr2=str2+str1[n2+1]

                                flg=1

        # 「質量部と」と次行の「質量部を含み」とを接続

        if “質量部と” in str2:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    if “質量部を含み” in str1[n2+1]:

                        bstr2=str2+str1[n2+1]

                        flg=1

        # 文末の「を有し、」と、次行文頭の「てなり」とを接続

        if str2[-4:]==”を有し、”:            

            if n2<(len(str1)-1):      

                if str1[n2+1] != “”:

                    if str1[n2+1][0:3]==”てなり”:

                        bstr2=str2+str1[n2+1]

                        bstr2=bstr2.replace(“、”,””)

                        flg=1

        # 「・・・は・・・であり」と次行の「した」とを接続

        if “は” in str2:

            if n2<(len(str1)-1):      

                if str2[-4:]==”であり、”:

                    if str1[n2+1] != “”:

                        if str1[n2+1][-2:]==”した”:

                            if len(str2+str1[n2+1])<70:

                                bstr2=str2+str1[n2+1]

                                bstr2=bstr2.replace(“、”,””)

                                flg=1

        # 「設けられ」と次行の「とを備える」とを接続

        if “設けられ” in str2:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    if “とを備える” in str1[n2+1]:

                        if len(str2+str1[n2+1])<70:

                            bstr2=str2+str1[n2+1]

                            # print(n1,bstr2)

                            flg=1

        # 「設けられ」と次行の「とを有する」とを接続

        if “設けられ” in str2:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    if “とを有する” in str1[n2+1]:

                        if len(str2+str1[n2+1])<70:

                            bstr2=str2+str1[n2+1]

                            flg=1

        # 文末「設けられ、」と次行の文末「と、」とを接続

        if str2[-5:]==”設けられ、”:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    if str1[n2+1][-2:]==”と、”:

                        if len(str2+str1[n2+1])<150:

                            bstr2=str2+str1[n2+1]

                            bstr2=bstr2.replace(“、”,””)

                            flg=1

        # 文末「させ、」と次行の文末「と、」とを接続

        if str2[-3:]==”させ、”:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    if str1[n2+1][-2:]==”と、”:

                        if len(str2+str1[n2+1])<150:

                            bstr2=str2+str1[n2+1]

                            bstr2=bstr2.replace(“、”,””)

                            flg=1

        # 文末「と、」と次行の文末「ともに、」とを接続

        if str2[-2:]==”と、”:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    flg=0

                    if str1[n2+1][-5:]==”とともに、”: flg=1

                    if str1[n2+1][-4:]==”とともに”: flg=1

                    if flg==1:

                        if len(str2+str1[n2+1])<150:

                            bstr2=str2+str1[n2+1]

                            bstr2=bstr2.replace(“、”,””)

                            flg=1

        # 文末「と、」と次行の文末「ともに、」とを接続

        if str2[-4:]==”ともに、”:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    flg=0

                    if str1[n2+1][-2:]==”と、”: flg=1

                    if flg==1:

                        if len(str2+str1[n2+1])<150:

                            bstr2=str2+str1[n2+1]

                            bstr2=bstr2.replace(“、”,””)

                            flg=1

        # 文末「と、」と次行の文末「備えており、」とを接続

        # print(n1,str2)

        if str2[-2:]==”と、”:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    if str1[n2+1][-6:]==”備えており、”:

                        if len(str2+str1[n2+1])<150:

                            bstr2=str2+str1[n2+1]

                            bstr2=bstr2.replace(“、”,””)

                            flg=1

        # 文末「と、」と次行の文末「備えており、」とを接続

        if str2[-4:]==”信号と、”:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    if str1[n2+1][-5:]==”比較器と、”:

                        if len(str2+str1[n2+1])<150:

                            bstr2=str2+str1[n2+1]

                            bstr2=bstr2.replace(“、”,””)

                            flg=1

        # 文末「と、」と次行の文末「備えており、」とを接続

        if str2[-5:]==”において、”:

            if n2<(len(str1)-1):

                if str1[n2+1] != “”:

                    if str1[n2+1][-7:]==”を形成している”:

                        if len(str2+str1[n2+1])<150:

                            bstr2=str2+str1[n2+1]

                            bstr2=bstr2.replace(“、”,””)

                            flg=1

        if len(str2)>0:

            if str2[-2:]==”と、”:

                if n2<(len(str1)-1):

                    if str1[n2+1] != “”:

                        if “とに分割し” in str1[n2+1]:

                            str2= str2.replace(“、”,””) 

                            str1[n2+1]=str1[n2+1].replace(“、”,””)

                            if len(str1[n2+1])>0:

                                bstr2=str2+str1[n2+1]+”、”

                                flg=1

        # 「を備え、」のみならば、前行の文末に接続

        if str2==”を備え、”:

            if len(str1[n2-1])>0:

                bstr2=str1[n2-1]+str2

            if len(str1[n2-2])>0:

                bstr2=str1[n2-2]+str2

            bstr2=bstr2.replace(“、”,””)

            flg=1                    

        if flg==1:

            if “(式” not in bstr2:

                bstr2= bstr2.replace(“、”,””) 

            if bstr2 not in bcl:

                bcl=bcl+str(bstr2)+”、”

        else:

            if len(str2)<200:

                str2= str2.replace(“、”,””)             

            if str2 not in bcl:

                bcl=bcl+str(str2) +”、”            

    # print(n1,”bcl=”,bcl)

    # print(n2,str2)

    bcl = bcl.replace(“させ、この”,”させこの”) 

    bcl = bcl.replace(“とを含み”,”とを含み、”) 

    if ct01>0:

        if ct01<2:

            bcl = bcl.replace(“とともに”,”とともに、”)

    flg=0

    if “を有しない” in bcl: flg=1

    if “を有した” in bcl: flg=1

    if “を有してなり” in bcl: flg=1

    if “を有してなる” in bcl: flg=1

    if “を有しており” in bcl: flg=1

    if “を有して” in bcl: flg=1

    if flg==0:

        bcl = bcl.replace(“を有し”,”を有し、”)

    bcl = bcl.replace(“を有し、その”,”を有しその、”)    # “を有し、その”は”、”無しに戻す

    bcl = bcl.replace(“押し込むと、”,”押し込むと”)

    bcl = bcl.replace(“段階において、”,”段階において”)

    bcl = bcl.replace(“部位と、”,”部位と”)

    bcl = bcl.replace(“対向し前記”,”対向し、前記”)

    bcl = bcl.replace(“角部と、”,”角部と”)

    bcl = bcl.replace(“と、隣接”,”と隣接”)

    bcl = bcl.replace(“を持ち”,”を持ち、”)

    bcl = bcl.replace(“下方において、”,”下方において”)

    bcl = bcl.replace(“方向において、”,”方向において”)

    bcl = bcl.replace(“側において、”,”側において”)    

    bcl = bcl.replace(“状態において、”,”状態において”)

    bcl = bcl.replace(“操作すると、”,”操作すると”)

    bcl = bcl.replace(“可能とするとともに、”,”可能とするとともに”)

    bcl = bcl.replace(“割合で含みかつ”,”割合で含み;かつ、”)        

    bcl = bcl.replace(“、、”,”、”)

    bcl = bcl.replace(“。(”,”。、(”)  

    bcl = bcl.replace(“。一般式”,”。、一般式”)  

    bcl = bcl.replace(“体。”,”体。、”)      

    bcl = bcl.replace(“形成されており該”,”形成されており、該”) 

    bcl = bcl.replace(“形成されこの”,”形成され、この”) 

    bcl = bcl.replace(“形成されると共に”,”形成されると共に、”)

    bcl = bcl.replace(“形成されていると共に”,”形成されていると共に、”)    

    bcl = bcl.replace(“設けられており該”,”設けられており、該”) 

    bcl = bcl.replace(“構成されるとともに”,”構成されるとともに、”) 

    bcl = bcl.replace(“備えると共に”,”備えると共に、”)    

    bcl = bcl.replace(“一体に設けられ、かつ”,”一体に設けられかつ”)

    bcl = bcl.replace(“比べると、”,”比べると”)

    bcl = bcl.replace(“同じであり、かつ”,”同じでありかつ”)

    bcl = bcl.replace(“面と、”,”面と”)

    bcl = bcl.replace(“保持されるとともに、”,”保持されるとともに”)

    bcl = bcl.replace(“位置において、”,”位置において”)

    bcl = bcl.replace(“移動させ、”,”移動させ”)

    bcl = bcl.replace(“差と、”,”差と”)

    bcl = bcl.replace(“比と、”,”比と”)

    bcl = bcl.replace(“値と、”,”値と”)

    bcl = bcl.replace(“入力されると、”,”入力されると”)

    bcl = bcl.replace(“中心と、”,”中心と”)

    bcl = bcl.replace(“温度と、”,”温度と”)

    bcl = bcl.replace(“変化させ、”,”変化させ”)

    bcl = bcl.replace(“時刻と、”,”時刻と”)

    bcl = bcl.replace(“区間において、”,”区間において”)

# “ことを特徴とする”

    np01=bcl.find(“ことを特徴とする”)

    np02=bcl.find(“。”,np01)

    np03=bcl.find(“工程”,np01)

    if np03<0:

        if np01>0:

            if np02>0:

                if (np02-np01)<100:

                    bcl=bcl[0:np02+1]+”、”+bcl[np02:]

    else:

        if np01>0:

            if np02>0:

                np04=bcl.find(“において、”)

                if np04>0:

                    bcl=bcl[np04+len(“において、”):np02+1]+”、”+bcl[np02:]     

                    bcl = bcl.replace(“。、。、”,”。、”)

    if len(bcl)<10: bcl=claim_list[n1]

    claim01_list.append(bcl)

# print(len(claim01_list))

claim03_list=[]

for n1,str1 in enumerate(claim01_list):

    if str1[-1]==”、”: str1=str1[0:len(str1)-1]

    str1 = str1.replace(“し、ている”,”している”) 

    str1 = str1.replace(“と、の”,”との”) 

    str1 = str1.replace(“可能であり、”,”可能であり”) 

    str1 = str1.replace(“と、この”,”とこの”)  

    if len(str1)<100:str1 = str1.replace(“、”,””) 

    # 元データの確認

    # print(“(n1=”,n1,”)”,claim_list[n1])

    str1_split=str1.split(“、”)    

    claim02_list=””

    for n2,str2 in enumerate(str1_split):

        if str2[-5:-3]==”工程”:    # 工程(a)の後に”と”が無かったケースを修正

            str2=str2+”と”

        if len(str2)!=1:   

            test=”test”    # エラー防止のためのダミー

            # 確認

            # print(n1,”-“,n2,str2)    # 分節結果の書き出し

            # print(“”)      

        claim02_list=claim02_list+”、”+str2

        claim02_list = claim02_list.replace(“。、。【”,”。【”) 

        claim02_list = claim02_list.replace(“。、”,”。”) 

        claim02_list = claim02_list.replace(“。。。”,”。”) 

        claim02_list = claim02_list.replace(“。。”,”。”) 

    claim03_list.append(claim02_list)        

    # 確認

    # print(“”)

print(“分節結果の数=”,len(claim03_list))

print(“”)

print(“請求項1を文節しました”)

# step7 発明の略称を抽出

# ・略称1=発明の名称から抽出

# ・略称2=請求項1から抽出

title01_list=[]     # 略称1

title02_list=[]     # 略称2

for n1, str1 in enumerate(claim03_list):    # 分節結果の書き出し

    bstr1 = str(str1)

    # print(n1,str1)

    # 「発明の名称」から略称1を抽出

    bttl01=ti_list_min[n1]

    # print(n1,”略称1=”,bttl01)

    title01_list.append(bttl01)

    # 請求項1から略称2を抽出

    # 略称切り出しKWを選定

    bttl02=”不明”

    bwrd=””

    bflg=0    

    # 特徴、特長

    if bflg==0:

        if “を特徴とする。” not in bstr1:

            if “を特徴とする” in bstr1: 

                bwrd=”を特徴とする”

                bflg=1

    if bflg==0:

        if “を特徴とした。” not in bstr1:

            if “を特徴とした” in bstr1: 

                bwrd=”を特徴とした”

                bflg=1

    if bflg==0:

        if “を特長とする” in bstr1: 

            bwrd=”を特長とする”

            bflg=1

    # 備え

    if bflg==0:

        if “とをさらに備える” in bstr1: 

            np01=bstr1.rfind(“とをさらに備える”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30:             

                bwrd=”とをさらに備える”

                bflg=1

        if “とを備えている” in bstr1: 

            np01=bstr1.rfind(“とを備えている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30:             

                bwrd=”とを備えている”

                bflg=1

        if “を備えている” in bstr1: 

            np01=bstr1.rfind(“を備えている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30:             

                bwrd=”を備えている”

                bflg=1

        if “を備えてなる” in bstr1: 

            np01=bstr1.rfind(“を備えてなる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30:             

                bwrd=”を備えてなる”

                bflg=1

    if bflg==0:            

        if “とを備える” in bstr1: 

            np01=bstr1.rfind(“とを備える”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<40: 

                bwrd=”とを備える”

                bflg=1

    if bflg==0:

        if “を備える” in bstr1: 

            np01=bstr1.rfind(“を備える”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<40: 

                bwrd=”を備える”

                bflg=1

    if bflg==0:

        if “を備えた” in bstr1: 

            np01=bstr1.rfind(“を備えた”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<40: 

                bwrd=”を備えた”

                bflg=1  

    if bflg==0:

        if “とを具備する” in bstr1: 

            np01=bstr1.rfind(“とを具備する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<40: 

                bwrd=”とを具備する”

                bflg=1  

    if bflg==0:

        if “を具備した” in bstr1: 

            np01=bstr1.rfind(“を具備した”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<40: 

                bwrd=”を具備した”

                bflg=1  

    # 含有            

    if bflg==0:

        if “を含有してなる” in bstr1: 

            np01=bstr1.rfind(“を含有してなる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を含有してなる”

                bflg=1    

        if “含有させてなる” in bstr1: 

            np01=bstr1.rfind(“含有させてなる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”含有させてなる”

                bflg=1 

    if bflg==0:

        if “とを含有する” in bstr1: 

            np01=bstr1.rfind(“とを含有する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”とを含有する”

                bflg=1      

    if bflg==0:

        if “を含有する” in bstr1: 

            np01=bstr1.rfind(“を含有する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を含有する”

                bflg=1 

    if bflg==0:

        if “含有する” in bstr1: 

            np01=bstr1.rfind(“含有する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”含有する”

                bflg=1 

    if bflg==0:

        if “とを含んでなる” in bstr1: 

            np01=bstr1.rfind(“とを含んでなる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”とを含んでなる”

                bflg=1       

    if bflg==0:

        if “を含んでなる” in bstr1: 

            np01=bstr1.rfind(“を含んでなる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を含んでなる”

                bflg=1                   

    if bflg==0:

        if “をさらに含む” in bstr1: 

            np01=bstr1.rfind(“をさらに含む”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”をさらに含む”

                bflg=1 

    if bflg==0:

        if “を少なくとも含む” in bstr1: 

            np01=bstr1.rfind(“を少なくとも含む”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を少なくとも含む”

                bflg=1                 

    if bflg==0:

        if “含まれる” in bstr1: 

            np01=bstr1.rfind(“含まれる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”含まれる”

                bflg=1                   

    if bflg==0:

        if “とを含む” in bstr1: 

            np01=bstr1.rfind(“とを含む”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”とを含む”

                bflg=1      

    if bflg==0:

        if “を含む” in bstr1: 

            np01=bstr1.rfind(“を含む”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を含む”

                bflg=1 

    if bflg==0:

        if “を包含する” in bstr1: 

            np01=bstr1.rfind(“を包含する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を包含する”

                bflg=1 

    # 構成

    if bflg==0:

        if “構成されるものである” in bstr1: 

            np01=bstr1.rfind(“構成されるものである”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”構成されるものである”

                bflg=1 

    if bflg==0:

        if “構成とされている” in bstr1: 

            np01=bstr1.rfind(“構成とされている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”構成とされている”

                bflg=1  

    if bflg==0:

        if “構成されている” in bstr1: 

            np01=bstr1.rfind(“構成されている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”構成されている”

                bflg=1  

    if bflg==0:

        if “構成される” in bstr1: 

            np01=bstr1.rfind(“構成される”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”構成される”

                bflg=1 

    if bflg==0:

        if “構成された” in bstr1: 

            np01=bstr1.rfind(“構成された”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”構成された”

                bflg=1 

    if bflg==0:

        if “構成している” in bstr1: 

            np01=bstr1.rfind(“構成している”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”構成している”

                bflg=1  

    if bflg==0:

        if “を構成する” in bstr1: 

            np01=bstr1.rfind(“を構成する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を構成する”

                bflg=1                 

    # 設け

    if bflg==0:

        if “設けられている” in bstr1: 

            np01=bstr1.rfind(“設けられている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”設けられている”

                bflg=1 

        if “設けられてなる” in bstr1: 

            np01=bstr1.rfind(“設けられてなる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”設けられてなる”

                bflg=1 

    if bflg==0:   

        if “に設けられる” in bstr1: 

            np01=bstr1.rfind(“に設けられる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”に設けられる”

                bflg=1

    if bflg==0:   

        if “を設けてある” in bstr1: 

            np01=bstr1.rfind(“を設けてある”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を設けてある”

                bflg=1                

    if bflg==0:

        if “を設けた” in bstr1: 

            np01=bstr1.rfind(“を設けた”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<40: 

                bwrd=”を設けた”

                bflg=1 

    # 形成

    if bflg==0:   

        if “から形成されている” in bstr1: 

            np01=bstr1.rfind(“から形成されている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”から形成されている”

                bflg=1 

        if bflg==0:

            if “形成されている” in bstr1: 

                np01=bstr1.rfind(“形成されている”)    #文末から検索

                np02=bstr1.find(“。”,np01)

                if np02-np01<30: 

                    bwrd=”形成されている”

                    bflg=1 

        if bflg==0:

            if “形成されてなる” in bstr1: 

                np01=bstr1.rfind(“形成されてなる”)    #文末から検索

                np02=bstr1.find(“。”,np01)

                if np02-np01<30: 

                    bwrd=”形成されてなる”

                    bflg=1

        if bflg==0:

            if “形成してある” in bstr1: 

                np01=bstr1.rfind(“形成してある”)    #文末から検索

                np02=bstr1.find(“。”,np01)

                if np02-np01<30: 

                    bwrd=”形成してある”

                    bflg=1 

        if bflg==0:     # 「が形成される」 及び、「に形成される」が対象

            if “形成される” in bstr1: 

                np01=bstr1.rfind(“形成される”)    #文末から検索

                np02=bstr1.find(“。”,np01)

                if np02-np01<30: 

                    bwrd=”形成される”

                    bflg=1

        # 「を形成した」は一般的なので保留

    # 有する 

    if bflg==0:

        if “をさらに有している” in bstr1: 

            np01=bstr1.rfind(“をさらに有している”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”をさらに有している”

                bflg=1 

    if bflg==0:

        if “とを有している” in bstr1: 

            np01=bstr1.rfind(“とを有している”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”とを有している”

                bflg=1 

    if bflg==0:

        if “を有してなる” in bstr1: 

            np01=bstr1.rfind(“を有してなる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を有してなる”

                bflg=1                 

    if bflg==0:   

        if “を有した” in bstr1: 

            np01=bstr1.rfind(“を有した”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を有した”

                bflg=1

    if bflg==0:

        if “とを有する” in bstr1: 

            np01=bstr1.rfind(“とを有する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30:             

                bwrd=”とを有する”

                bflg=1 

    if bflg==0:   

        if “を有する” in bstr1: 

            np01=bstr1.rfind(“を有する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”を有する”

                bflg=1

    # 範囲

    if bflg==0:   

        if “の範囲内である” in bstr1: 

            np01=bstr1.rfind(“の範囲内である”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”の範囲内である”

                bflg=1

        if “の範囲にある” in bstr1: 

            np01=bstr1.rfind(“の範囲にある”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”の範囲にある”

                bflg=1

    # その他

    if bflg==0:   

        if “取り付けられている” in bstr1: 

            np01=bstr1.rfind(“取り付けられている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”取り付けられている”

                bflg=1   

        if “可能となっている” in bstr1: 

            np01=bstr1.rfind(“可能となっている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”可能となっている”

                bflg=1    

    if bflg==0:   

        if “するようにした” in bstr1: 

            np01=bstr1.rfind(“するようにした”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”するようにした”

                bflg=1

    if bflg==0:   

        if “とからなる” in bstr1: 

            np01=bstr1.rfind(“とからなる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”とからなる”

                bflg=1

    if bflg==0:   

        if “に用いられる” in bstr1: 

            np01=bstr1.rfind(“に用いられる”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”に用いられる”

                bflg=1

    if bflg==0:   

        if “したものである” in bstr1: 

            np01=bstr1.rfind(“したものである”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”したものである”

                bflg=1

    if bflg==0:   

        if “されている” in bstr1: 

            np01=bstr1.rfind(“されている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”されている”

                bflg=1                

    if bflg==0:   

        if “してある” in bstr1: 

            np01=bstr1.rfind(“してある”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”してある”

                bflg=1

    if bflg==0:   

        if “している” in bstr1: 

            np01=bstr1.rfind(“している”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”している”

                bflg=1

    if bflg==0:   

        if “となるように混合する” in bstr1: 

            np01=bstr1.rfind(“となるように混合する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30: 

                bwrd=”となるように混合する”

                bflg=1                

    if bflg==0:   

        if “制御を行う” in bstr1: 

            np01=bstr1.rfind(“制御を行う”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”制御を行う”

                bflg=1                

    if bflg==0:   

        if “を制御する” in bstr1: 

            np01=bstr1.rfind(“を制御する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”を制御する”

                bflg=1

    if bflg==0:   

        if “とを配置する” in bstr1: 

            np01=bstr1.rfind(“とを配置する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”とを配置する”

                bflg=1

    if bflg==0:   

        if “を提供する” in bstr1: 

            np01=bstr1.rfind(“を提供する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”を提供する”

                bflg=1

    if bflg==0:   

        if “を構築する” in bstr1: 

            np01=bstr1.rfind(“を構築する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”を構築する”

                bflg=1

    if bflg==0:   

        if “機能させるための” in bstr1: 

            np01=bstr1.rfind(“機能させるための”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”機能させるための”

                bflg=1

    if bflg==0:   

        if “を行うための” in bstr1: 

            np01=bstr1.rfind(“を行うための”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”を行うための”

                bflg=1

    if bflg==0:   

        if “を実行させるための” in bstr1: 

            np01=bstr1.rfind(“を実行させるための”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”を実行させるための”

                bflg=1

    if bflg==0:   

        if “とさせるための” in bstr1: 

            np01=bstr1.rfind(“とさせるための”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”とさせるための”

                bflg=1

    if bflg==0:   

        if “を推定する” in bstr1: 

            np01=bstr1.rfind(“を推定する”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”を推定する”

                bflg=1 

    if bflg==0:   

        if “できるようにした” in bstr1: 

            np01=bstr1.rfind(“できるようにした”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”できるようにした”

                bflg=1 

    if bflg==0:   

        if “で表される” in bstr1: 

            np01=bstr1.rfind(“で表される”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”で表される”

                bflg=1 

    if bflg==0:   

        if “させるものである” in bstr1: 

            np01=bstr1.rfind(“させるものである”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<15:    # 一般的な語であるので15文字以下とした

                bwrd=”させるものである”

                bflg=1

    if bflg==0:   

        if “させることが可能である” in bstr1: 

            np01=bstr1.rfind(“させることが可能である”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30:    

                bwrd=”させることが可能である”

                bflg=1    

    if bflg==0:   

        if “で作られている” in bstr1: 

            np01=bstr1.rfind(“で作られている”)    #文末から検索

            np02=bstr1.find(“。”,np01)

            if np02-np01<30:    

                bwrd=”で作られている”

                bflg=1    

    sikiflg=0

    if “化合物” in str1: sikiflg=1

    if “一般式” in str1: sikiflg=1

    if “下記式” in str1: sikiflg=1

    if “式中” in str1: sikiflg=1

    if “高分子” in str1: sikiflg=1

    if “単量体” in str1: sikiflg=1

    if “組成物” in str1: sikiflg=1

    if “質量部” in str1: sikiflg=1

    if “分子量” in str1: sikiflg=1

    if “共重合体” in str1: sikiflg=1

    if “リポ蛋白” in str1: sikiflg=1

    if “化合物” in str1: sikiflg=1   

    if “モル比” in str1: sikiflg=1 

    if “モル%” in str1: sikiflg=1

    if “モル数” in str1: sikiflg=1

    if “質量%” in str1: sikiflg=1

    if bflg==0:  

        if “を備える” in bstr1:

            np01=bstr1.find(“を備える”)

            np02=bstr1.find(“:”,np01)

            if np02>0:

                if np02-np01<15:

                    bstr1 = bstr1.replace(“:”,”。”)    # “:”を”。”に変更

                    bwrd=”を備える”

                    bflg=1 

    if bflg==0:  

        if “以下の特徴を有する” in bstr1:

            np01=bstr1.find(“以下の特徴を有する”)

            np02=bstr1.find(“:”,np01)

            if np02>0:

                if np02-np01<20:

                    bstr1 = bstr1.replace(“:”,”。”)    # “:”を”。”に変更

                    bwrd=”以下の特徴を有する”

                    bflg=1 

    if bflg==0:      

        if “以下の特性を有する” in bstr1:

            np01=bstr1.find(“以下の特性を有する”)

            np02=bstr1.find(“:”,np01)

            if np02>0:

                if np02-np01<30:

                    bstr1 = bstr1.replace(“:”,”。”)    # “:”を”。”に変更

                    bwrd=”以下の特性を有する”

                    bflg=1   

    if bflg==0:  

        if “下記式” in bstr1:            

            if “を満足する” in bstr1:

                np01=bstr1.find(“を満足する”)

                np02=bstr1.find(“:”,np01)

                if np02>0:

                    if np02-np01<15:

                        bstr1 = bstr1.replace(“:”,”。”)    # “:”を”。”に変更

                        bwrd=”を満足する”

                        bflg=1 

    if bflg==0:  

        if “下記” in bstr1:            

            if “を全て満たす” in bstr1:

                np01=bstr1.find(“を全て満たす”)

                np02=bstr1.find(“。”,np01)

                if np02>0:

                    if np02-np01<30:

                        bwrd=”を全て満たす”

                        bflg=1 

    if bflg==0:  

        if sikiflg==1:    

            ct=bstr1.count(“である”)

            if ct==1:

                if “である。]” not in bstr1:                

                    if “である” in bstr1:

                        np01=bstr1.find(“である”)

                        np02=bstr1.find(“。”,np01)

                        if np02>0:

                            if np02-np01<15:

                                bstr1 = bstr1.replace(“:”,”。”)    # “:”を”。”に変更

                                bwrd=”である”

                                bflg=1 

    # 「である・・・。【化」のケースでは 「。【化」を起点に処理。bttl02を作成

    if bflg==0:  

        ct=bstr1.count(“である”)

        if ct==1:    

            if “である。]” not in bstr1:   

                if “である” in bstr1:

                    np01=bstr1.find(“。【”)

                    np02=bstr1.find(“である”,np01-20)

                    if  np01>0:

                        if np02>0:

                            bwrd=”である”

                            bttl02=bstr1[np02+3:np01]

                            bflg=2    # 0又1以外に設定

    if bflg==1:

        np01=bstr1.rfind(bwrd)

        np02=bstr1.find(“。”,np01)

        np03=bstr1.find(“:”,np01)

        if np02>0:

            if np03>0:

                if np03<np02:np02=np03    # “:”が”。”より前にあれば”:”を優先

        if bwrd==”を特徴とする”:

            if np01>0:

                if np02>0:

                    bttl02=bstr1[np01+len(bwrd):np02]

                    # 確認

                    # print(n1,bwrd,”=”,bttl02)

                    bflg=2

        if bwrd==”を特徴とした”:

            if np01>0:

                if np02>0:

                    bttl02=bstr1[np01+len(bwrd):np02]

                    # 確認

                    # print(n1,bwrd,”=”,bttl02)

                    bflg=2

        if bflg<2:

            if np01>0:

                if np02>0:

                    if np02-np01<40:

                        bttl02=bstr1[np01+len(bwrd):np02]

                        # 確認

                        # print(n1,bwrd,”=”,bttl02)

            else:

                test=”test”    # エラー防止のためのダミー

                # 確認

                # print(n1,bttl02,bstr1)

    else:

        if bflg==0:

            test=”test”    # エラー防止のためのダミー

            # 確認

            # print(n1,bttl02,bstr1)    # 上記以外なら元に戻す

    title02_list.append(bttl02)

print(“略称1の数=”,len(title01_list))

print(title01_list[0:5])

print(“略称2の数=”,len(title02_list))

print(title02_list[0:5])

print(“”)

print(“発明の略称を抽出しました”)

# step8 要部構成に絞り込み

## ・前提部(ex:「おいて、」以前)をカットする。

## ・まず略称2+前提部でカットを試み、

## ・カットできなければ略称1でカット

## ・化学関係の式の説明をカット

bclaim1_list=[]

cut_list=[]    # カットした語句(確認用)

for n1, str1 in enumerate(claim03_list):    # 分節結果の書き出し

    if str1[0]==”、”:str1=str1[1:]

    # print(n1,str1)

    # 確認

    # print(n1,”略称1=”,title01_list[n1])

    # print(n1,”略称2=”,title02_list[n1])

    # ()記号を全角に統一

    str1 = str1.replace(“(“,”(”)

    str1 = str1.replace(“)”,”)”)

    # 「・・・。ただし・・・。」は、ただし以降を削除

    ct=str1.count(“。”)

    if ct>1:

        np01=str1.find(“。ただし”)

        np02=str1.find(“。”,np01+1)

        if np01>0:

            if np02>0:

                bwrd=str1[np01+1:np02+1]

                str1=str1.replace(bwrd,””)

                # print(n1,str1)

    # (・・・は、・・・。)を消去

    ct=str1.count(“(”)

    if ct>0:

        np01=str1.find(“(”)

        np02=str1.find(“。)”,np01+1)

        if np01>0:

            if np02>0:

                if (np02-np01)<15:

                    bwrd=str1[np01:np02+2]

                    str1=str1.replace(bwrd,””)

    # 確認    

    # if n1==5326: print(n1,str1)

    # 化学関連における式の説明を消去。ただし短文はそのままとする。

    sikiflg=0

    if “化合物” in str1: sikiflg=1

    if “一般式” in str1: sikiflg=1

    if “下記式” in str1: sikiflg=1

    if “式中” in str1: sikiflg=1

    if “高分子” in str1: sikiflg=1

    if “単量体” in str1: sikiflg=1

    if “組成物” in str1: sikiflg=1

    if “質量部” in str1: sikiflg=1

    if “分子量” in str1: sikiflg=1

    if “共重合体” in str1: sikiflg=1

    if “リポ蛋白” in str1: sikiflg=1

    if “化合物” in str1: sikiflg=1   

    if “モル比” in str1: sikiflg=1 

    if “モル%” in str1: sikiflg=1

    if “モル数” in str1: sikiflg=1

    if “質量%” in str1: sikiflg=1

    # print(“sikiflg=”,sikiflg)

    cflg=0    # ct=1: 化学関連の式を消去したフラグ

    if “式” in str1:        

        # [式・・・ である。]。半角

        ct=1

        for nn in range(ct):

            np01=str1.find(“[式”)

            np02=str1.find(“である。]”)

            if np01>0:

                if np02>0:

                    if (np02-np01)>0:

                        np00=len(str1)

                        str1=str1[0:np01]+str1[np02+len(“である。]”):np00]

                        # print(“(式・・・ である。)=”,n1,str1)

                        cflg=1    

        npmaru1=str1.find(“。”)

        # print(“npmaru1=”,npmaru1)     # 一番目の”。”の位置        

        if len(str1)>300:            

            #(上記式・・・である。)

            ct=str1.count(“である。)”)

            for nn in range(ct):

                np01=str1.find(“(上記式”,npmaru1)

                np02=str1.find(“である。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“である。)”):np00]

                            # print(“(上記式・・・ である。)=”,n1,str1)

                            cflg=1

            # (式・・・示す。)

            ct=str1.count(“示す。)”)

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“示す。)”,np01)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“示す。)”):np00]

                            # print(“(式・・・示す。)=”,n1,str1)

                            cflg=1

            #(式・・・表す。)

            ct=str1.count(“表す。)”)

            for nn in range(ct):

                np01=str1.find(“(式”,npmaru1)

                np02=str1.find(“表す。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            # print(“式・・・表す。)”)

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“表す。)”):np00]

                            # print(“(式・・・表す。)=”,n1,str1)

                            cflg=1

            # (式・・・ある。)

            ct=str1.count(“ある。)”)

            # print(“ct=”,ct)

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“ある。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“ある。)”):np00]

                            # print(“(式・・・ある。)=”,n1,str1)

                            cflg=1

            # (式・・・ある)    # 「。」無し

            ct=str1.count(“ある)”)

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“ある)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“ある)”):np00]

                            # print(“(式・・・ある)=”,n1,str1)

                            cflg=1

          # (式・・・する。)

            ct=str1.count(“する。)”)

            if ct==0: ct=str1.count(“する)”)

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“する。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“する。)”):np00]

                            # print(“(式・・・する)=”,n1,str1)

                            cflg=1  

            # (式・・・良い。)

            ct=str1.count(“良い。)”)

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“良い。)”,np01)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“良い。)”):np00]

                            # print(“(式・・・良い。)=”,n1,str1)

                            cflg=1

            # (式・・・含む。)

            ct=str1.count(“含む。)”)

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“含む。)”,np01)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:                            

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“含む。)”):np00]

                            # print(“(式・・・含む。)=”,n1,str1)

                            cflg=1

            # (式・・・選ばれる。)

            ct=str1.count(“選ばれる。)”)

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“選ばれる。)”,np01)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“選ばれる。)”):np00]

                            # print(“(式・・・選ばれる。)=”,n1,str1)

                            cflg=1            

            # 〔式・・・ある。〕  “(”、”)”、ではなく、”〔”、”〕”で照合

            ct=str1.count(“ある。〕”)

            for nn in range(ct):

                np01=str1.find(“〔式”)

                np02=str1.find(“ある。〕”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“ある。〕”):np00]

                            # print(“〔式・・・ある。〕=”,n1,str1)

                            cflg=1

            # 〔式・・・よい。〕  ”(”、”)”、ではなく、”〔”、”〕”で照合

            ct=str1.count(“よい。〕”)

            for nn in range(ct):

                np01=str1.find(“〔式”)

                np02=str1.find(“よい。〕”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“よい。〕”):np00]

                            # print(“〔式・・・よい。〕=”,n1,str1)

                            cflg=1

            # 〔式・・・表す。〕  ”(”、”)”、ではなく、”〔”、”〕”で照合

            ct=str1.count(“表す。〕”)

            for nn in range(ct):

                np01=str1.find(“〔式”)

                np02=str1.find(“表す。〕”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“表す。〕”):np00]

                            # print(“〔式・・・表す。〕=”,n1,str1)

                            cflg=1    

            # 〔式・・・ 示す。〕

            ct=1

            for nn in range(ct):

                np01=str1.find(“〔式”)

                np02=str1.find(“示す。〕”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“示す。〕”):np00]

                            # print(“〔式・・・ 示す。〕=”,n1,str1)

                            cflg=1 

            # [式・・・ 表す。]

            ct=1

            for nn in range(ct):

                np01=str1.find(“[式”)

                np02=str1.find(“表す。]”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“表す。]”):np00]

                            # print(“[式・・・ 表す。]=”,n1,str1)

                            cflg=1          

            # [式・・・ である。]  全角

            ct=str1.count(“である。]”)

            for nn in range(ct):

                np01=str1.find(“[式”)

                np02=str1.find(“である。]”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“である。]”):np00]

                            # print(“[式・・・ である。] =”,n1,str1)

                            cflg=1

            # 確認

            # if n1==2136: print(n1,”str1=”,str1)              

            # [式・・・ もよい]

            ct=1

            for nn in range(ct):

                np01=str1.find(“[式”)

                np02=str1.find(“もよい]”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“もよい]”):np00]

                            # print(“[式・・・ もよい] =”,n1,str1)

                            cflg=1 

            # [式・・・ もよい。]

            ct=1

            for nn in range(ct):

                np01=str1.find(“[式”)

                np02=str1.find(“もよい。]”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“もよい。]”):np00]

                            # print(“[式・・・ もよい。]=”,n1,str1)

                            cflg=1

            # [式・・・ 示す。]

            ct=str1.count(“示す。]”)

            for nn in range(ct):

                np01=str1.find(“[式”)

                np02=str1.find(“示す。]”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“示す。]”):np00]

                            # print(“[式・・・ 示す。]=”,n1,str1)

                            cflg=1

            # [式・・・ 示す]  「。」無し

            ct=str1.count(“示す]”)

            for nn in range(ct):

                np01=str1.find(“[式”)

                np02=str1.find(“示す]”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“示す]”):np00]

                            # print(“[式・・・ 示す]=”,n1,str1)

                            cflg=1

            # [式・・・ 同じ。]

            ct=1

            for nn in range(ct):

                np01=str1.find(“[式”)

                np02=str1.find(“同じ。]”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“同じ。]”):np00]

                            # print(“[式・・・ 同じ。]=”,n1,str1)

                            cflg=1 

            # [式・・・ ている]

            ct=1

            for nn in range(ct):

                np01=str1.find(“[式”)

                np02=str1.find(“ている]”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“ている]”):np00]

                            # print(“[式・・・ ている]]=”,n1,str1)

                            cflg=1            

            # (上記一般式・・・ある。)

            ct=str1.count(“ある。)”)

            for nn in range(ct):

                np00=len(str1)

                np01=str1.find(“(上記一般式”)

                np02=str1.find(“ある。)”,np01)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“ある。)”):np00]

                            # print(“(上記一般式・・・ある。)=”,n1,str1)

                            cflg=1 

            # (上記一般式・・・表す。)

            ct=str1.count(“表す。)”)

            for nn in range(ct):

                np01=str1.find(“(上記一般式”)

                np02=str1.find(“表す。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“表す。)”):np00]

                            # print(“(上記一般式・・・表す。)=”,n1,str1)

                            cflg=1

            # (一般式・・・表す。)

            ct=str1.count(“表す。)”)

            for nn in range(ct):

                np01=str1.find(“(一般式”)

                np02=str1.find(“表す。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            # print(“(一般式・・・表す。)”)

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“表す。)”):np00]

                            # print(“(一般式・・・表す。)=”,n1,str1)

                            cflg=1 

            # (一般式・・・ものとする)

            ct=str1.count(“ものとする)”)

            for nn in range(ct):

                np01=str1.find(“(一般式”)

                np02=str1.find(“ものとする)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“ものとする)”):np00]

                            # print(“(一般式・・・ものとする)=”,n1,str1)

                            cflg=1

            # (この基・・・もよい)

            ct=str1.count(“もよい)”)

            for nn in range(ct):

                np01=str1.find(“(この基”)

                np02=str1.find(“もよい)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“もよい)”):np00]

                            # print(“(この基・・・もよい)=”,n1,str1)

                            cflg=1 

            # “〈式” ・・・ “〉。”

            ct=str1.count(“もよい)”)

            for nn in range(ct):

                np01=str1.find(“〈式”)

                np02=str1.find(“〉。”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“〉。”):np00]

                            # print(“〈式” ・・・ “〉。=”,n1,str1)

                            cflg=1                    

            # (但し・・・ 除く。)

            ct=str1.count(“除く。)”)

            for nn in range(ct):

                np01=str1.find(“(但し”)

                np02=str1.find(“除く。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“除く。)”):np00]

                            if len(str1)<30:

                                if len(str1)>400:

                                    str1=str1[0:100]+”・・・・・・”+str1[-100:]

                                    # print(“(但し・・・ 除く。)=”,n1,str1)

                                    cflg=1 

            # (但し・・・ 表す。)

            ct=str1.count(“表す。)”)            

            for nn in range(ct):

                np01=str1.find(“(但し”)

                np02=str1.find(“表す。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“表す。)”):np00]

                            if len(str1)<30:

                                if len(str1)>400:

                                    str1=str1[0:100]+”・・・・・・”+str1[-100:]       

                                    # print(“(但し・・・ 表す。)=”,n1,str1)

                                    cflg=1

            # 「。(・・・なる。)」

            ct=1

            for nn in range(ct):

                np01=str1.find(“。(”)

                np02=str1.find(“なる。)”,np01)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“なる。〕”):np00]

                            # print(“「。(・・・なる。)」=”,n1,str1)

                            cflg=1           

            # 「】(・・・表す。)」

            ct=1

            for nn in range(ct):

                np01=str1.find(“】(”)

                np02=str1.find(“表す。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“表す。)”):np00]

                            # print(“「】(・・・表す。)」=”,n1,str1)

                            cflg=1

            # 「】(・・・除く。)」

            ct=1

            for nn in range(ct):

                np01=str1.find(“】(”)

                np02=str1.find(“除く。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“除く。)”):np00]

                            # print(“「】(・・・除く。)」=”,n1,str1)

                            cflg=1

            # (式・・・表す。)

            ct=1

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“表す。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“表す。)”):np00]

                            # print(“(式・・・表す。)=”,n1,str1)

                            cflg=1

            # print(len(str1),str1)

            # (式・・・である)

            ct=1

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“もよい)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“もよい)”):np00]

                            # print(“(式・・・である)=”,n1,str1)

                            cflg=1

            # 「。(・・・である)」

            ct=1

            for nn in range(ct):

                np01=str1.find(“。(”)

                np02=str1.find(“である)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“である)”):np00]

                            # print(“「。(・・・である)」=”,n1,str1)

                            cflg=1

            # (式・・・表す。)

            ct=1

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“表す。)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“表す。)”):np00]

                            # print(“(式・・・表す。)=”,n1,str1)

                            cflg=1

            # (式・・・同じ)  「。」無し

            ct=1

            for nn in range(ct):

                np01=str1.find(“(式”)

                np02=str1.find(“同じ)”)

                if np01>0:

                    if np02>0:

                        if (np02-np01)>0:

                            np00=len(str1)

                            str1=str1[0:np01]+str1[np02+len(“同じ)”):np00]

                            # print(“(式・・・同じ)=”,n1,str1)

                            cflg=1

            # 上記処理によっても長文なら最初の”。”まで。ただし200文字以内とするか

            # “。”までが短文であれば、全体で200文字以内とする

            if len(str1)>400:

                np01=str1.find(“。”)

                if np01>0:

                    if np01>50:

                        str1=str1[0:np01]

                        # print(n1,”str1=”,str1)

                    else:

                        str1=str1[0:200]+”・・・”

                        # print(n1,”str1=”,str1)

    # (・・・)が(1)などなら消去

    ct=str1.count(“(”)

    # n1指定のテスト用 

    cutflg1=0

    for nn in range(ct):

        nwd=0

        np01=str1.find(“(”)

        np02=str1.find(“)”,np01)

        bwrd=str1[np01:np02+1]

        bwrd1 = re.sub(r”[0-9]”, “”, bwrd)   # 全角数字

        bwrd1 = re.sub(r”[0-9]”, “”, bwrd1)    # 半角数字

        bwrd1 = re.sub(r”[a-z]”, “”, bwrd1)  #半角小文字

        bwrd1 = re.sub(r”[a-z]”, “”, bwrd1)  #全角小文字

        bwrd1 = re.sub(r”[A-Z]”, “”, bwrd1)  #半角大文字

        bwrd1 = re.sub(r”[A-Z]”, “”, bwrd1)  #全角大文字        

        bwrd1 = re.sub(r”、”, “”, bwrd1)  

        bwrd1 = re.sub(r”,”, “”, bwrd1)

        if len(bwrd1)==2:

            str1=str1[0:np01]+str1[np02+1:]

            cutflg1=1

        if len(bwrd1)>2:    # 上記以外の文字・記号を含む場合

            if len(bwrd1)<5:

                str1=str1[0:np01]+str1[np02+1:]

                cutflg1=1

    # 確認

    # if cutflg1==1: print(“((1)など)”,n1,str1)

    # “、”の前の文字が[0-9]、[A-Z]なら”_”に変更

    ct=str1.count(“、”)       

    np02=0

    for nn in range(ct):

        np01=str1.find(“、”,np02)    # 前回の”、”の次から検索

        wd=str1[np01-1]

        mt = re.search(“[0-9]”, wd)    # 半角数字

        if mt != None:

            str1=str1.replace(wd+”、”,wd+”_”)

        mt = re.search(“[0-9]”, wd)   # 全角数字    

        if mt != None:  

            str1=str1.replace(wd+”、”,wd+”_”)        

        mt=re.search(“[a-z]”, wd)    # #半角小文字

        if mt != None:     

            str1=str1.replace(wd+”、”,wd+”_”)

        mt=re.search(“[a-z]”, wd)    # #全角小文字

        if mt != None:   

            str1=str1.replace(wd+”、”,wd+”_”)

        mt=re.search(“[A-Z]”, wd)    # #半角大文字

        if mt != None:   

            str1=str1.replace(wd+”、”,wd+”_”)

        mt=re.search(“[A-Z]”, wd)    # #全角大文字

        if mt != None:       

            str1=str1.replace(wd+”、”,wd+”_”)      

        np02=np01+1    # 検索開始を今回の”、”の+1文字に変更 

    # “と、”の前の文字が[0-9]、[A-Z]なら”_”に変更

    ct=str1.count(“と、”)       

    np02=0

    for nn in range(ct):

        np01=str1.find(“と、”,np02)    # 前回の”、”の次から検索

        wd=str1[np01-1]

        mt = re.search(“[0-9]”, wd)    # 半角数字

        if mt != None:

            str1=str1.replace(wd+”と、”,wd+”と_”)

        mt = re.search(“[0-9]”, wd)   # 全角数字    

        if mt != None:  

            str1=str1.replace(wd+”と、”,wd+”と_”)        

        mt=re.search(“[a-z]”, wd)    # #半角小文字

        if mt != None:    

            str1=str1.replace(wd+”と、”,wd+”と_”)

        mt=re.search(“[a-z]”, wd)    # #全角小文字

        if mt != None:      

            str1=str1.replace(wd+”と、”,wd+”と_”)

        mt=re.search(“[A-Z]”, wd)    # #半角大文字

        if mt != None:     

            str1=str1.replace(wd+”と、”,wd+”と_”)

        mt=re.search(“[A-Z]”, wd)    # #全角大文字

        if mt != None:       

            str1=str1.replace(wd+”と、”,wd+”と_”)      

        np02=np01+2    # 検索開始を今回の”、”の+2文字に変更

    # 照合前の修正

    # 「間であって、」なら「、」を削除して接続など

    np01=str1.find(“であって、”)

    np02=str1.find(“間であって、”)

    if (np02-np01)<2: str1=str1.replace(“間であって、”,”間であって”)

    str1 = str1.replace(“面において、”,”面において”)

    str1 = str1.replace(“外において、”,”外において”)

    str1 = str1.replace(“内において、”,”内において”)

    str1 = str1.replace(“遊技において、”,”遊技において”)

    str1 = str1.replace(“役であり、”,”役であり”)

    str1 = str1.replace(“で、表される”,”で表される”)

    str1 = str1.replace(“中において、”,”中において”)

    str1 = str1.replace(“時において、”,”時において”)

    str1 = str1.replace(“軸において、”,”軸において”)

    str1 = str1.replace(“同一であり、”,”同一であり”)

    str1 = str1.replace(“コースにおいて、”,”コースにおいて”)

    str1 = str1.replace(“一部において、”,”一部において”)

    str1 = str1.replace(“方において、”,”方において”)

    str1 = str1.replace(“との間において、”,”との間において”)

    str1 = str1.replace(“℃において、”,”℃において”)

    str1 = str1.replace(“時間帯とにおいて、”,”時間帯とにおいて”)

    str1 = str1.replace(“合において、”,”合において”)

    str1 = str1.replace(“部分において、”,”部分において”)

    str1 = str1.replace(“)において、”,”)において”)

    str1 = str1.replace(“径であり、”,”径であり”)

    str1 = str1.replace(“組成において、”,”組成において”)

    str1 = str1.replace(“分布において、”,”分布において”)

    str1 = str1.replace(“データにおいて、”,”データにおいて”)

    str1 = str1.replace(“対して、”,”対して”)

    str1 = str1.replace(“させることにより、”,”させることにより”)

    str1 = str1.replace(“、および、”,”および”)

    str1 = str1.replace(“を、”,”を”)

    str1 = str1.replace(“、及び”,”及び”)

    str1 = str1.replace(“及び、”,”及び”)

    str1 = str1.replace(“の、”,”の”)

    str1 = str1.replace(“、かつ”,”かつ”)

    str1 = str1.replace(“℃、”,”℃_”)

    str1 = str1.replace(“整数であり、”,”整数であり_”)

    str1 = str1.replace(“は、”,”は”)

    str1 = str1.replace(“おり、且”,”おり且つ”)

    str1 = str1.replace(“のうち、”,”のうち”)

    str1 = str1.replace(“モード、”,”モード_”)

    str1 = str1.replace(“し、”,”し”)

    str1 = str1.replace(“で、”,”で”)

    str1 = str1.replace(“えて、”,”えて”)

    str1 = str1.replace(“上、”,”上_”)

    str1 = str1.replace(“下、”,”下_”)

    str1 = str1.replace(“により、”,”により”)

    str1 = str1.replace(“する、”,”する”)

    str1 = str1.replace(“場合、”,”場合_”)

    str1 = str1.replace(“視において、”,”視において”)

    str1 = str1.replace(“として、”,”として”)

    str1 = str1.replace(“すべてと、”,”すべてと”)

    str1 = str1.replace(“姿勢と、”,”姿勢と”)

    str1 = str1.replace(“位置と、”,”位置と”)

    str1 = str1.replace(“領域において、”,”領域において”)

    str1 = str1.replace(“間において、”,”間において”)

    str1 = str1.replace(“範囲において、”,”範囲において”)

    str1 = str1.replace(“時点において、”,”時点において”)

    str1 = str1.replace(“タイミングとにおいて、”,”タイミングとにおいて”)

    str1 = str1.replace(“曲線であって、”,”曲線であって”)

    str1 = str1.replace(“マップから、”,”マップから”)

    str1 = str1.replace(“した後、”,”した後”)

    str1 = str1.replace(“としたとき、”,”としたとき”)

    str1 = str1.replace(“流体と、”,”流体と”)

    str1 = str1.replace(“角度において、”,”角度において”)

    str1 = str1.replace(“熱量と、”,”熱量と”)

    str1 = str1.replace(“と、に”,”とに”)

    str1 = str1.replace(“受けると、”,”受けると”)

    str1 = str1.replace(“且つ、”,”且つ”)

    str1 = str1.replace(“、且つ”,”且つ”)

    str1 = str1.replace(“かつ、”,”かつ”)

    str1 = str1.replace(“されると、”,”されると”)

    str1 = str1.replace(“がると、”,”がると”)

    str1 = str1.replace(“満たすと、”,”満たすと”)

    str1 = str1.replace(“あっても、”,”あっても”)

    str1 = str1.replace(“行われると、”,”行われると”)

    str1 = str1.replace(“づけると、”,”づけると”)

    str1 = str1.replace(“と、から、”,”とから”)

    str1 = str1.replace(“際、”,”際_”)

    str1 = str1.replace(“わると、”,”わると”)

    str1 = str1.replace(“位置について、”,”位置について”)

    str1 = str1.replace(“持ち、越し”,”持ち越し”)

    str1 = str1.replace(“押し付けて、”,”押し付けて”)

    str1 = str1.replace(“用いて、”,”用いて”)

    str1 = str1.replace(“したとき、”,”したとき”)

    str1 = str1.replace(“算出において、”,”算出において”)

    str1 = str1.replace(“から、”,”から”)

    str1 = str1.replace(“割合と、”,”割合と”)

    str1 = str1.replace(“あるか、又は”,”あるか又は”)

    str1 = str1.replace(“一部と、”,”一部と”)

    str1 = str1.replace(“した時、”,”した時_”)

    str1 = str1.replace(“曲線において、”,”曲線において”)

    str1 = str1.replace(“平行であって、”,”平行であって”)

    str1 = str1.replace(“可能な、”,”可能な”)

    str1 = str1.replace(“して、その”,”してその”)

    str1 = str1.replace(“者について、”,”者について”)

    str1 = str1.replace(“上方であって、”,”上方であって”)

    str1 = str1.replace(“スペースにおいて、”,”スペースにおいて”)

    str1 = str1.replace(“側と、”,”側と”)

    str1 = str1.replace(“されたとき、”,”されたとき”)

    str1 = str1.replace(“条件と、”,”条件と”)

    str1 = str1.replace(“正負と、”,”正負と”)

    str1 = str1.replace(“するとき、”,”するとき”)

    str1 = str1.replace(“容積と、”,”容積と”)

    str1 = str1.replace(“以下であって、”,”以下であって”)

    str1 = str1.replace(“量と、”,”量と”)

    str1 = str1.replace(“ときと、”,”ときと”)

    str1 = str1.replace(“決定して、”,”決定して”)

    str1 = str1.replace(“なければ、”,”なければ”)

    str1 = str1.replace(“箇所において、”,”箇所において”)

    str1 = str1.replace(“直線と、”,”直線と”)

    str1 = str1.replace(“それぞれ、”,”それぞれ”)

    str1 = str1.replace(“、とする場合に”,”とする場合に”)

    str1 = str1.replace(“特性、”,”特性”)

    str1 = str1.replace(“状態と、”,”状態と”)

    str1 = str1.replace(“箇所において、”,”箇所において”)

    str1 = str1.replace(“一律であり、”,”一律であり”)

    str1 = str1.replace(“スピーカ、”,”スピーカ”)

    str1 = str1.replace(“された後、”,”された後”)

    str1 = str1.replace(“基づき、”,”基づき”)

    str1 = str1.replace(“従って、”,”従って”)

    str1 = str1.replace(“先端と、”,”先端と”)

    str1 = str1.replace(“基づき、”,”基づき”)

    str1 = str1.replace(“基づいて、”,”基づいて”)

    str1 = str1.replace(“間隔において、”,”間隔において”)

    str1 = str1.replace(“部において、”,”部において”)

    str1 = str1.replace(“一方と、”,”一方と”)

    str1 = str1.replace(“にしたがって、”,”にしたがって”)

    str1 = str1.replace(“張力と、”,”張力と”)

    str1 = str1.replace(“順位、”,”順位_”)

    str1 = str1.replace(“電力、”,”電力_”)

    str1 = str1.replace(“回ると、”,”回ると”)

    str1 = str1.replace(“結果と、”,”結果と”)

    str1 = str1.replace(“その後、”,”その後”)

    str1 = str1.replace(“方向と、”,”方向と”)

    str1 = str1.replace(“年数と、”,”年数と”)

    str1 = str1.replace(“モル、”,”モル”)

    str1 = str1.replace(“辺と、”,”辺と”)

    str1 = str1.replace(“変化させて、”,”変化させて”)

    str1 = str1.replace(“、もしくは”,”もしくは”)

    str1 = str1.replace(“より、”,”より”)

    str1 = str1.replace(“見たとき、”,”見たとき”)

    str1 = str1.replace(“連動して、”,”連動して”)

    str1 = str1.replace(“をもって、”,”をもって”)

    str1 = str1.replace(“基、”,”基_”)

    str1 = str1.replace(“介して、”,”介して”)

    str1 = str1.replace(“隔てて、”,”隔てて”)

    str1 = str1.replace(“れぞれ導体と、”,”れぞれ導体と”)

    str1 = str1.replace(“であり、”,”であり”)

    str1 = str1.replace(“可能であって、”,”可能であって”)

    str1 = str1.replace(“モードにおいて、”,”モードにおいて”)

    str1 = str1.replace(“えると、”,”えると”)

    str1 = str1.replace(“の内、”,”の内”)

    str1 = str1.replace(“終了して、”,”終了して”)

    str1 = str1.replace(“回転させ、”,”回転させ”)

    str1 = str1.replace(“位置させ、”,”位置させ”)

    str1 = str1.replace(“特性と、”,”特性と”)

    str1 = str1.replace(“ときにおいて、”,”ときにおいて”)

    str1 = str1.replace(“後において、”,”後において”)

    str1 = str1.replace(“特性に応じて、”,”特性に応じて”)

    str1 = str1.replace(“長く、”,”長く”)

    str1 = str1.replace(“大きく、”,”大きく”)

    str1 = str1.replace(“前、”,”前_”)

    str1 = str1.replace(“であれば、”,”であれば”)

    str1 = str1.replace(“応じて、”,”応じて”)

    str1 = str1.replace(“表現され、”,”表現され”)

    str1 = str1.replace(“係数と、”,”係数と”)

    str1 = str1.replace(“があると、”,”があると”)

    str1 = str1.replace(“合計と、”,”合計と”)

    # (以後・・・という。)を削除

    ct=str1.count(“(以後”)

    for nn in range(ct):

        np01 =str1.find(“(以後”)

        np02=str1.find(“という。)”,np01)

        if np01>0:

            if np02>0:

                bwrd=str1[np01:np02+len(“という。)”)]

                str1 = str1.replace(bwrd,””)

                # print(“(以後・・・という。)=”,n1,str1)

    # 「であって、・・・とを備え、」なら「とを備え、」を優先(“であって、”の”、”を削除)

    np01=str1.find(“であって、”)

    np02=str1.find(“とを備え、”)

    if np01>0:

        if np02>0:

            if (np02-np01)>0: str1=str1.replace(“であって、”,”であって”)

    # 「とを備え、・・・場合であって、」なら「とを備え、」を優先(“場合であって、”の”、”を削除)

    np01=str1.find(“とを備え、”)

    np02=str1.find(“場合であって、”)    

    if np01>0:

        if np02>0:    

            if (np02-np01)>0: str1=str1.replace(“場合であって、”,”場合であって”)  

    # 「とを備え、・・・場合において、」なら「とを備え、」を優先(“場合において、”の”、”を削除)

    np01=str1.find(“とを備え、”)

    np02=str1.find(“場合において、”)    

    if np01>0:

        if np02>0:

            if (np02-np01)>0: str1=str1.replace(“場合において、”,”場合において”)  

    # 「において、・・・を備え、」なら「を備え、」を優先(“において、”の”、”を削除)

    np01=str1.find(“において、”)

    np02=str1.find(“を備え、”)    

    np03=len(str1)

    if np01>0:

        if np02>0:

            if (np03-np02)>200:

                if (np02-np01)>0: str1=str1.replace(“において、”,”において”)          

    # 「であって、・・・であり、」なら「であって、」を優先(“場であり、”の”、”を削除)

    np01=str1.find(“であって、”)

    np02=str1.find(“であり、”)    

    if np01>0:

        if np02>0:

            if (np02-np01)<50: str1=str1.replace(“であり、”,”であり”)   

    # print(n1,”str1=”,st    # 「・・・と、・・・と、・・・において、・・・とを・・・。」は「において、」を「おいて」に変更

    #「と、」が多くかつ「、」に近い数てあれば「において、」から「、」を消去し、次の文と接続

    ct1=str1.count(“、”)

    ct2=str1.count(“と、”)

    if ct1>=4:

        if (ct1-ct2)<=2:

            for nn in range(ct1):

                np01=str1.rfind(“と、”)

                np02 =str1.find(“において、”,np01)

                np03=str1.find(“とを有する”,np02)

                np04=str1.find(“。”,np03)

                if np01>0:

                    if np02>0:

                        if np03>0:

                            if np03>0:

                                str1=str1.replace(“において、”,”において”)  

    # 「:・・・ここで・・・係数である」

    np01=str1.find(“:”)

    np02=str1.find(“ここで”,np01)

    np03=str1.find(“係数である”,np02)

    if np01>0:

        if np02>0:

            if np03>0:

                str1=str1[0:np01]

                # print(“「:・・・ここで・・・係数である」”,n1,str1)

    # title02_list+bttl、又は、title01_list+bttlにより照合    

    bttl_list=[“において、”,”であって、”,”とを備えており、”,”を備えており、”,”とを備え、”,”を備え、”,

              “とを有し、”,”とを具備し、”,”であり、”]

    ybflg=0

    yobu=str1

    boite=””    

    for bttl in bttl_list: 

        if ybflg==1: break

        if title02_list[n1] == “不明”:

            bwrd=title01_list[n1]+bttl

            np01=str1.find(bwrd)

            if np01>0:

                yobu=str1[np01+len(bwrd):]    

                boite=str1[0:np01+len(bwrd)]

                ybflg=1

            else:    # bwrd「”において、”」の末尾の”、”を削除して照合。ただし”であり、”は除外

                if bttl !=”であり、”:

                    bwrd2=bwrd[0:-1]

                    if bwrd2 in str1:

                        np01=str1.find(bwrd2)

                        yobu=str1[np01+len(bwrd2):]    

                        boite=str1[0:np01+len(bwrd2)]

                        ybflg=1

        else:    # 略称2が有れば

            bwrd=title02_list[n1]+bttl

            if bwrd in str1:

                np01=str1.find(bwrd)

                if np01>0:

                    yobu=str1[np01+len(bwrd):]

                    # 確認

                    # print(“n1=”,n1,”(要部構成)=”,yobu)

                    boite=str1[0:np01+len(bwrd)]

                    ybflg=1

            else:    # bwrd「”において、”」の末尾の”、”を削除して照合。ただし”であり、”は除外

                if bttl !=”であり、”:

                    bwrd2=bwrd[0:-1]

                    if bwrd2 in str1:

                        np01=str1.find(bwrd2)

                        yobu=str1[np01+len(bwrd2):]    

                        # 確認

                        # print(“n1=”,n1,”(要部構成)=”,yobu)

                        boite=str1[0:np01+len(bwrd2)]

                        ybflg=1

            if ybflg==0:    # 略称2でヒットしなければ略称1で照合

                bwrd=title01_list[n1]+bttl

                if bwrd in str1:

                    np01=str1.find(bwrd)

                    if np01>0:

                        yobu=str1[np01+len(bwrd):]

                        # 確認

                        # print(“n1=”,n1,”(要部構成)=”,yobu)

                        boite=str1[0:np01+len(bwrd)]

                        ybflg=1

    # 確認

    # if n1==3170: print(n1,”yobu=”,yobu) 

    # 短かすぎる場合はstr1のままとする

    if len(yobu)<20:

        yobu=str1

    # print(n1,yobu)

    # “一般式”などが含まれていればbsiki_flg=1とする

    bsiki_flg=0

    if “一般式” in str1: bsiki_flg=1

    if “下記式” in str1: bsiki_flg=1

    if “上記式” in str1: bsiki_flg=1

    if “(式” in str1: bsiki_flg=1

    if “〔式” in str1: bsiki_flg=1

    if “式で” in str1: bsiki_flg=1

    if “式に” in str1: bsiki_flg=1

    if “式(” in str1: bsiki_flg=1

    # if bsiki_flg==1:print(“bsiki_flg=1”,n1,str1)

    # 上記以外はbttlのみで照合(“において”~”であり、”まで)

    if ybflg==0:

        for bttl in bttl_list:    # bttlのみで照合(“において”~”であり、”まで)

            if ybflg==1: break

            np01=str1.find(bttl)

            if np01>0:

                # 確認

                # if n1==3170: print(n1,”yobu=”,yobu) 

                if bttl==”であって、”:

                    if bsiki_flg==1:

                        np02=str1.find(“式”)

                        if np02<100:

                            yobu=str1

                            # 確認

                            # print(“n1=”,n1,”(「”, bttl, “」を含む要部構成)=”,yobu)

                            ybflg=1   

                        else:

                            yobu=str1[np01+len(bttl):]     # “であって、”以降を採用

                            # 確認

                else:

                    # 確認

                    if bttl==”であり、”:

                        if (len(str1)-np01)<50:

                            str1=str1.replace(“であり、”,”であり”)

                            yobu=str1

                            boite=str1[0:np01+len(bttl)]

                            ybflg=1

                    else:

                        np02=str1.find(“式において”)

                        if np02>0:

                            if abs(np01-np02)>10:

                                yobu=str1[np01+len(bttl):]

                                if yobu[0:1]==”、”: yobu=yobu[1:]

                                # 確認

                                # print(“n1=”,n1,”(「”,bttl,”」以後の要部構成)=”,yobu)

                                boite=str1[0:np01+len(bttl)]

                                ybflg=1

    #確認

    # print(n1,”yobu=”,yobu)

    # if n1==3170: print(n1,”yobu=”,yobu) 

    # cflg、ybflg、sikiflgに応じて修正

    # print(n1,yobu)

    # print(n1,”cflg=”,cflg,”ybflg=”,ybflg,”bsiki_flg=”,bsiki_flg)

    if yobu[0:1]==”、”: yobu=yobu[1:]

    # cflg、ybflg、sikiflg=1,1,1 – 1,0,1

    if cflg==1:

        if ybflg==1: 

            if bsiki_flg==1:

                yobu=”(式の説明は消去)”+”(要部構成)”+ yobu

        else:

            if bsiki_flg==1:

                yobu=”(式の説明は消去)”+ yobu

    # cflg、ybflg、sikiflg=0,1,0 – 0,0,0           

    if cflg==0:

        if ybflg==1: 

            if sikiflg == 0:

                if bsiki_flg==0:

                    yobu=”(要部構成)”+ yobu

            else:

                if bsiki_flg==1:

                    yobu=”(式の説明は消去)”+ yobu

        else:

            if sikiflg == 0:

                if bsiki_flg==0:

                    yobu=”(修正無し)”+ yobu

            else:

                if bsiki_flg==1:

                    yobu=”(式の説明は消去)”+ yobu

    # 「積層体。(i)・・・である。」のように主文+”。”+補足条件のケースでは

    # 短文ならば(修正無し)

    np01=str1.find(“。”)

    np02=len(str1)

    if np01>0:

        if np02<300:

            if np01<100:

                if cflg==0:

                    if sikiflg == 0:

                        if bsiki_flg==0:

                            yobu=”(修正無し)”+str1[0:np01+1]+”、”+str1[np01+1:]

                            boite=””

                    else:

                        if bsiki_flg==1:                            

                            yobu=”(式の説明は消去)”+str1[0:np01+1]+”、”+str1[np01+1:]

                            boite=””

                else:

                    if bsiki_flg==1:

                        yobu=”(式の説明は消去)”+str1[0:np01+1]+”、”+str1[np01+1:]

                        boite=””

    # 「・・・であり、・・・。」でかつ短文なら(修正無し)

    np01=str1.find(“であり、”)

    np02=str1.find(“。”)

    np03=len(str1)

    if np01>0:

        if np02>0:

            if (np02-np01)<100:

                if np03<200:

                    if cflg==0:

                        if bsiki_flg==0:

                            yobu=”(修正無し)”+str1

                            boite=””

                        else:

                            if bsiki_flg==1:

                                yobu=”(式の説明は消去)”+str1

                                boite=””

    # 化学関連で「・・・であり、・・・。」などでかつ短文なら(修正無し)

    if “であり、” in str1:

        np01=str1.find(“であり、”)

    else:

        if “であって、” in str1:

            np01=str1.find(“であって、”)

    np03=len(str1)

    if np01>0:

        if np01<100:

            if np03<400:

                if sikiflg==1:    # 化学関連

                    if cflg==0:

                        if bsiki_flg==0:

                            yobu=”(修正無し)”+str1

                            boite=””

                    else:

                        if bsiki_flg==1:

                            yobu=”(式の説明は消去)”+str1

                        boite=””

        if sikiflg==1:

            if np03<300:

                if cflg==0:

                    if bsiki_flg==0:

                        yobu=”(修正無し)”+str1

                        boite=””

                else:

                    if bsiki_flg==1:

                        yobu=”(式の説明は消去)”+str1

                    boite=””

    # 化学関連で最初の”。”までが短文なら”、”。”以降はそのまま

    if sikiflg==1:    # 化学関連

        # print(n1)

        np01=str1.find(“。”)

        if np01>0:

            if np01<150:

                bwrd=str1[0:np01]+”。、”

                if len(str1)>np01:

                    yobu=bwrd+str1[np01+1:]

                    # print(“化学関連で最初の「。」までが短文=”,n1,yobu)    

        # print(n1,yobu)

    # 短文でかつ「、」を含む場合は「、」を削除

    # 短文:(式の説明は消去)、(要部構成)を消去して100文字以内

    # 短文:文頭から”。”までが100文字以内

    flg=0

    bwrd=yobu.replace(“(式の説明は消去)”, “”)

    bwrd=bwrd.replace(“(要部構成)”, “”)

    np01=bwrd.find(“。”)

    bwrd=bwrd[0:np01]

    if len(bwrd)<100:

        yobu=yobu.replace(“、”, “”)

        # print(n1,yobu)  

    # “・・・・・・”を含んでいれば(式の説明は消去)を追記

    if “・・・・・・” in yobu:

        if “(式の説明は消去)” not in yobu:

            yobu=”(式の説明は消去)”+yobu

    # 末尾が”。、”なら”。”に修正

    if yobu[-2:]==”。、”: yobu=yobu[0:-1]

    # 工程の文中の””、を消去

    if “工程と、” in yobu:

        yobu_split = yobu.split(“、”)

        bwrd=””

        for n2,str1 in enumerate(yobu_split):

            if “工程と” not in str1[-3:]:

                bwrd=bwrd+str1

            else:

                bwrd=bwrd+str1+”、”

        yobu=bwrd

    if “工程、” in yobu:    

        yobu_split = yobu.split(“、”)

        bwrd=””

        for n2,str1 in enumerate(yobu_split):

            if “工程” not in str1[-2:]:

                bwrd=bwrd+str1

            else:

                bwrd=bwrd+str1+”、”

        yobu=bwrd

    # コメント無しでかつ”式”を含む短文は(不明)か(式の説明は消去)を追加

    if yobu[0:1] !=”(“:

        if “式” in yobu:

            if len(yobu)<20:

                yobu= “(不明)”+yobu

            else:

                yobu= “(式の説明は消去)”+yobu

        # print(n1,yobu)

    #  コメント無しでかつ”を特徴とする”を含む短文は(不明)を追加

    if yobu[0:1] !=”(“:

        if “を特徴とする” in yobu:

            if len(yobu)<30:

                yobu= “(不明)”+yobu

        # print(n1,yobu)

    # yobuが30文字以内でstr1が200文字以上ならyobu=str1に戻す

    if len(yobu)<30:

        if len(str1)>200:

            yobu=str1

            # print(n1,yobu)

    # yobuが短文でかつ「下記式:」で切れている場合は元のクレームの文頭から「下記式:」に

    # 文末の一部を接続する    

    if len(yobu)<50:

        if len(claim03_list[n1])>400:

            bwrd=str(claim03_list[n1])

            np01=bwrd.find(“下記式”)

            nwd=len(“下記式”)

            if np01<0:

                np01=bwrd.find(“下記一般式”)

                nwd=len(“下記一般式”)

            np02=bwrd.rfind(“を満たす”,np01)

            if np02<0:

                np02=bwrd.rfind(“を特徴とする”,np01)

            np03=bwrd.find(“。”,np02)

            if np01>1:

                if np02>0:

                    if np03>0:

                        print(n1,”(式の説明は消去)”)

                        # yobu=”(式の説明は消去)”+bwrd[0:np01+nwd]+”・・・・・・”+bwrd[np02:np03+1]

                        # print(n1,yobu)

    # リスト化

    bclaim1_list.append(yobu)

    cut_list.append(boite)

print(‘要部構成[0:5]=’,bclaim1_list[0:5])  

# DataFrame化

df19 = pd.DataFrame(data=bclaim1_list, columns=[‘要部構成’])

print(“”)

print(“請求項1の要部構成を作成しました”)

# step9 新規要素抽出

# 請求項1に含まれていた単語から従来技術に含まれていた単語を除去することにより、

# 新規要素を抽出する。

import pandas as pd

import numpy as np

import openpyxl

import re

import difflib

import Levenshtein

from pprint import pprint

# ブックを作成

# book = openpyxl.Workbook()

# 保存

# book.save(‘sample公報.xlsx’)

# シートを追加

# ws = book.create_sheet(title=’書誌・課題・新規要素・主要構成’)

# ws = book.create_sheet(title=’新課題code表’)

# Excelシート「Sheet」を削除

# del book[‘Sheet’]

# 保存

# book.save(‘書誌・課題・新規要素・主要構成data.xlsx’)

# データ読み込み

# pat_data = pd.read_excel(‘課題code付き公報data.xlsx’, sheet_name=’課題code付き公報’)

# 公報データ読み込み

pat_data = pd.read_excel(‘課題分析公報.xlsx’,sheet_name=’母集合’) 

pat_data = pat_data.dropna(how=’all’)    # 全列がNaNである行を削除

print(‘公報件数=’,len(pat_data))

# 公報番号読み込み

patno_data = pat_data.iloc[:,0]

kensu = len(patno_data)

pn_list =[]

for str1 in patno_data:

    str0 = str1

    pn_list.append(str(str0))

# print(“公報件数=”,len(pn_list))

# 従来の技術読み込み

part_data = pat_data.iloc[:,12]

prart_list =[]

for n1,str1 in enumerate(part_data):

    if str(str1) != ‘nan’:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除        

        npos = str1.find(“【発明の開示】”)

        if npos>0: str1= str1[0: npos ]  

        npos = str1.find(“【発明の概要】”)

        if npos>0: str1= str1[0: npos ]  

        npos = str1.find(“】本発明”)

        if npos>0: str1= str1[0: npos ] 

        npos = str1.find(“】本明細書”)

        if npos>0: str1= str1[0: npos ]         

    else:

        str1 = ‘無し。’

    prart_list.append(str(str1))

# 従来技術を単語に分割

prart2_list =[]

for str1 in prart_list:

    if str(str1) != ‘nan’:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

    else:

        str1 = ‘無し。’

    str1 = (str1.replace(” “, “”))    # 半角空白を削除

    str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

    str1 = (str1.replace(“に記載の”, “”))

    str1 = (str1.replace(“実質的”, “”))

    str1 = (str1.replace(“当たり”, “”))

    str1 = (str1.replace(“式中”, “”))    

    str1 = (str1.replace(“前記”, “”))

    str1 = (str1.replace(“前期”, “”))

    str1 = (str1.replace(“上記”, “”))

    str1 = (str1.replace(“下記”, “”))

    str1 = (str1.replace(“特徴”, “”))

    str1 = (str1.replace(“及び”, “、”))

    str1 = (str1.replace(“又は”, “、”))

    str1 = (str1.replace(“若しくは”, “、”))

    str1 = (str1.replace(“以上”, “、”))

    str1 = (str1.replace(“以下”, “、”))

    str1 = (str1.replace(“以外”, “、”))

    str1 = (str1.replace(“以内”, “、”))

    str1 = (str1.replace(“未満”, “”))

    str1 = (str1.replace(“超えて”, “”))

    str1 = (str1.replace(“使用”, “、”))    

    str1 = (str1.replace(“場合”, “、”))  

    str1 = (str1.replace(“含む”, “、”)) 

    str1 = (str1.replace(“個有”, “、”)) 

    str1 = (str1.replace(“乃至”, “、”)) 

    str1 = (str1.replace(“当たり”, “、”)) 

    str1 = (str1.replace(“当該”, “、”))

    str1 = (str1.replace(“分間”, “、”))

    str1 = (str1.replace(“員環”, “、”))

    str1 = (str1.replace(“%中和”, “中和”))

    str1 = (str1.replace(“た後”, “、”))    

    str1 = (str1.replace(“第一”, “”))

    str1 = (str1.replace(“第二”, “”))

    str1 = (str1.replace(“第ニ”, “”))

    str1 = (str1.replace(“第三”, “”))

    str1 = (str1.replace(“全部”, “”))

    str1 = (str1.replace(“一部”, “”))

    str1 = (str1.replace(“相当”, “”))

    str1 = (str1.replace(“複数”, “”))

    str1 = (str1.replace(“各々”, “”))

    str1 = (str1.replace(“=基”, “”))

    str1 = (str1.replace(“【化”, “”))

    str1 = (str1.replace(“℃”, “”))    

    str1 = (str1.replace(“カ所”, “”))  

    str1 = (str1.replace(“具備”, “”))

    str1 = (str1.replace(“前者”, “”))

    str1 = (str1.replace(“後者”, “”))

    str1 = (str1.replace(“番目”, “”))

    str1 = (str1.replace(“任意”, “”))    

    str1 = (str1.replace(“【”, “、”))    

    str1 = (str1.replace(“】”, “、”))

    str1 = (str1.replace(“[”, “、”))

    str1 = (str1.replace(“]”, “、”))

    str1 = (str1.replace(“[“, “、”))

    str1 = (str1.replace(“]”, “、”))    

    str1 = (str1.replace(“〔”, “、”))

    str1 = (str1.replace(“〕”, “、”))

    str1 = (str1.replace(“{”, “、”))

    str1 = (str1.replace(“}”, “、”))

    str1 = (str1.replace(“「”, “、”))

    str1 = (str1.replace(“」”, “、”))    

    str1 = (str1.replace(“<”, “、”))   

    str1 = (str1.replace(“>”, “、”))     

    str1 = (str1.replace(“(”, “、”))

    str1 = (str1.replace(“)”, “、”))

    str1 = (str1.replace(“(“, “、”))    # 小文字削除

    str1 = (str1.replace(“)”, “、”))    # 小文字削除

    str1 = (str1.replace(“。”, “、”)) 

    str1 = (str1.replace(“+”, “、”))

    str1 = (str1.replace(“/”, “、”))

    str1 = (str1.replace(“=”, “、”))

    str1 = (str1.replace(“=”, “、”))

    str1 = (str1.replace(“≦”, “、”)) 

    str1 = (str1.replace(“+”, “、”))

    str1 = (str1.replace(“Δ”, “、”))

    str1 = (str1.replace(“~”, “、”))

    str1 = (str1.replace(“*-”, “、”))

    str1 = (str1.replace(“…”, “、”))

    str1 = (str1.replace(“α”, “、”))

    str1 = (str1.replace(“γ”, “、”))

    str1 = (str1.replace(“δ”, “、”))

    str1 = (str1.replace(“θ”, “、”))

    str1 = (str1.replace(“ω”, “、”))

    str1 = (str1.replace(“η”, “、”))

    str1 = (str1.replace(“ξ”, “、”))

    str1 = (str1.replace(“φ”, “、”))

    str1 = (str1.replace(“∞”, “、”))

    str1 = (str1.replace(“μ”, “、”))

    str1 = (str1.replace(“Ω”, “、”))    

    str1 = (str1.replace(“’’”, “、”))

    str1 = (str1.replace(“’”, “、”))

    str1 = (str1.replace(“°”, “、”))

    str1 = (str1.replace(“’”, “、”))

    str1 = (str1.replace(“-“, “、”))

    str1 = (str1.replace(“-“, “、”))

    str1 = (str1.replace(“;”, “、”))

    str1 = (str1.replace(“:”, “、”))

    str1 = (str1.replace(“・”, “、”))

    str1 = (str1.replace(“,”, “、”))    

    str1 = re.sub(r”[あ-ん]”, “、”, str1)  #ひらがな除去

    str1 = re.sub(r”[a-z]”, “、”, str1)  #半角小文字

    str1 = re.sub(r”[a-z]”, “、”, str1)  #全角小文字

    str1 = re.sub(r”[A-Z]”, “、”, str1)  #半角大文字

    str1 = re.sub(r”[A-Z]”, “、”, str1)  #全角大文字    

    str1 = re.sub(r”[0-9]”, “、”, str1)  #数字除去

    str1 = re.sub(r”[0-9]”, “、”, str1)  #数字除去

    str1 = (str1.replace(“、該”, “、”))

    str1 = (str1.replace(“該、”, “、”))

    str1 = (str1.replace(“含有、”, “”))

    str1 = (str1.replace(“-、”, “、”))

    str1 = (str1.replace(“-基”, “、”))

    str1 = (str1.replace(“、-”, “、”))

    str1 = (str1.replace(“中、”, “、”))

    str1 = (str1.replace(“~、”, “、”))

    str1 = (str1.replace(“存在、”, “、”))

    str1 = (str1.replace(“由来、”, “、”))

    str1 = (str1.replace(“、=”, “、”))

    str1 = (str1.replace(“-=”, “、”))

    str1 = (str1.replace(“--”, “、”))

    str1 = (str1.replace(“*#、”, “、”))

    str1 = (str1.replace(“¥#、”, “、”))

    str1 = (str1.replace(“、、、、、、”, “、”))

    str1 = (str1.replace(“、、、、、”, “、”))

    str1 = (str1.replace(“、、、、”, “、”))

    str1 = (str1.replace(“、、、”, “、”))

    str1 = (str1.replace(“、、”, “、”))   

    str1 = (str1.replace(“-、”, “、”))

    str1 = (str1.replace(“’’”, “、”))

    # 結合

    str1_split = str1.split(“、”)    

    str1_list = “”

    for str2 in str1_split:

        if len(str2) > 1:

            if str2 not in str1_list:

                str1_list = str1_list + str2 + “、”    

    # print(n1,str1_list)

    prart2_list.append(str1_list)

# print(“prart2_list=”,prart2_list)

# 要部構成修正

claim1_list =[]

for n1,str1 in enumerate(bclaim1_list):

    if str(str1) != ‘nan’:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

    else:

        str1 = ‘無し。’

    claim1_list.append(str(str1))

print(“claim1_list=”,claim1_list[0:1])

# 要部構成を単語に分割

# 注釈とした追記した(要部構成)、(修正無し)、(式の説明は消去)を除去

claim2_list =[]

for n1,str1 in enumerate(claim1_list):

    if str(str1) != ‘nan’:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除     

    else:

        str1 = ‘無し。’

    # 注釈とした追記した(要部構成)、(修正無し)、(式の説明は消去)を除去

    if str1[0:9]==”(式の説明は消去)”: 

        str1=str1[9:]    # 要部構成から「式の説明は消去、」を削除”    

    if str1[0:6]==”(要部構成)”: 

        str1=str1[6:]    # 要部構成から「要部構成、」を削除”

    if str1[0:6]==”(修正無し)”: 

        str1=str1[6:]    # 要部構成から「修正無し、」を削除”

    # print(n1,str1)

    str1 = (str1.replace(“【請求項1】”, “”))

    str1 = (str1.replace(“下記一般式”, “”))

    str1 = (str1.replace(“下記構造式”, “”))

    str1 = (str1.replace(“一般式”, “”))

    str1 = (str1.replace(“に記載の”, “”))

    str1 = (str1.replace(“実質的”, “”))

    str1 = (str1.replace(“当たり”, “”))

    str1 = (str1.replace(“式中”, “”))    

    str1 = (str1.replace(“前記”, “”))

    str1 = (str1.replace(“前期”, “”))

    str1 = (str1.replace(“上記”, “”))

    str1 = (str1.replace(“下記”, “”))

    str1 = (str1.replace(“特徴”, “”))

    str1 = (str1.replace(“及び”, “、”))

    str1 = (str1.replace(“又は”, “、”))

    str1 = (str1.replace(“若しくは”, “、”))

    str1 = (str1.replace(“以上”, “、”))

    str1 = (str1.replace(“以下”, “、”))

    str1 = (str1.replace(“以外”, “、”))

    str1 = (str1.replace(“以内”, “、”))

    str1 = (str1.replace(“未満”, “”))

    str1 = (str1.replace(“超えて”, “”))

    str1 = (str1.replace(“使用”, “、”))    

    str1 = (str1.replace(“場合”, “、”))  

    str1 = (str1.replace(“含む”, “、”)) 

    str1 = (str1.replace(“個有”, “、”)) 

    str1 = (str1.replace(“乃至”, “、”)) 

    str1 = (str1.replace(“当たり”, “、”)) 

    str1 = (str1.replace(“当該”, “、”))

    str1 = (str1.replace(“分間”, “、”))

    str1 = (str1.replace(“員環”, “、”))

    str1 = (str1.replace(“%中和”, “中和”))

    str1 = (str1.replace(“た後”, “、”))    

    str1 = (str1.replace(“第一”, “”))

    str1 = (str1.replace(“第二”, “”))

    str1 = (str1.replace(“第ニ”, “”))

    str1 = (str1.replace(“第三”, “”))

    str1 = (str1.replace(“全部”, “”))

    str1 = (str1.replace(“一部”, “”))

    str1 = (str1.replace(“相当”, “”))

    str1 = (str1.replace(“複数”, “”))

    str1 = (str1.replace(“各々”, “”))

    str1 = (str1.replace(“=基”, “”))

    str1 = (str1.replace(“【化”, “”))

    str1 = (str1.replace(“℃”, “”))    

    str1 = (str1.replace(“カ所”, “”))  

    str1 = (str1.replace(“具備”, “”))

    str1 = (str1.replace(“前者”, “”))

    str1 = (str1.replace(“後者”, “”))

    str1 = (str1.replace(“番目”, “”))

    str1 = (str1.replace(“任意”, “”))

    str1 = (str1.replace(“一方”, “”))

    str1 = (str1.replace(“他方”, “”))

    str1 = (str1.replace(“徐々”, “”))

    str1 = (str1.replace(“一端”, “”))

    str1 = (str1.replace(“他端”, “”))    

    str1 = (str1.replace(“【”, “、”))    

    str1 = (str1.replace(“】”, “、”))

    str1 = (str1.replace(“[”, “、”))

    str1 = (str1.replace(“]”, “、”))

    str1 = (str1.replace(“[“, “、”))

    str1 = (str1.replace(“]”, “、”))

    str1 = (str1.replace(“〔”, “、”))

    str1 = (str1.replace(“〕”, “、”))

    str1 = (str1.replace(“{”, “、”))

    str1 = (str1.replace(“}”, “、”))

    str1 = (str1.replace(“「”, “、”))

    str1 = (str1.replace(“」”, “、”))    

    str1 = (str1.replace(“<”, “、”))   

    str1 = (str1.replace(“>”, “、”))     

    str1 = (str1.replace(“(”, “、”))

    str1 = (str1.replace(“)”, “、”))

    str1 = (str1.replace(“(“, “、”))    # 小文字削除

    str1 = (str1.replace(“)”, “、”))    # 小文字削除

    str1 = (str1.replace(“。”, “、”)) 

    str1 = (str1.replace(“+”, “、”))

    str1 = (str1.replace(“/”, “、”))

    str1 = (str1.replace(“=”, “、”))

    str1 = (str1.replace(“=”, “、”))

    str1 = (str1.replace(“≦”, “、”)) 

    str1 = (str1.replace(“+”, “、”))

    str1 = (str1.replace(“Δ”, “、”))

    str1 = (str1.replace(“~”, “、”))

    str1 = (str1.replace(“*-”, “、”))

    str1 = (str1.replace(“…”, “、”))

    str1 = (str1.replace(“α”, “、”))

    str1 = (str1.replace(“γ”, “、”))

    str1 = (str1.replace(“δ”, “、”))

    str1 = (str1.replace(“θ”, “、”))

    str1 = (str1.replace(“ω”, “、”))

    str1 = (str1.replace(“η”, “、”))

    str1 = (str1.replace(“ξ”, “、”))

    str1 = (str1.replace(“φ”, “、”))

    str1 = (str1.replace(“∞”, “、”))

    str1 = (str1.replace(“μ”, “、”))

    str1 = (str1.replace(“Ω”, “、”))    

    str1 = (str1.replace(“’’”, “、”))

    str1 = (str1.replace(“’”, “、”))

    str1 = (str1.replace(“°”, “、”))

    str1 = (str1.replace(“’”, “、”))

    str1 = (str1.replace(“-“, “、”))

    str1 = (str1.replace(“-“, “、”))

    str1 = (str1.replace(“;”, “、”))

    str1 = (str1.replace(“:”, “、”))

    str1 = (str1.replace(“・”, “、”))

    str1 = (str1.replace(“,”, “、”))    

    str1 = re.sub(r”[あ-ん]”, “、”, str1)  #ひらがな除去

    str1 = re.sub(r”[a-z]”, “、”, str1)  #半角小文字

    str1 = re.sub(r”[a-z]”, “、”, str1)  #全角小文字

    str1 = re.sub(r”[A-Z]”, “、”, str1)  #半角大文字

    str1 = re.sub(r”[A-Z]”, “、”, str1)  #全角大文字    

    str1 = re.sub(r”[0-9]”, “、”, str1)  #数字除去

    str1 = re.sub(r”[0-9]”, “、”, str1)  #数字除去

    str1 = (str1.replace(“、該”, “、”))

    str1 = (str1.replace(“該、”, “、”))

    str1 = (str1.replace(“含有、”, “”))

    str1 = (str1.replace(“-、”, “、”))

    str1 = (str1.replace(“-基”, “、”))

    str1 = (str1.replace(“、-”, “、”))

    str1 = (str1.replace(“中、”, “、”))

    str1 = (str1.replace(“~、”, “、”))

    str1 = (str1.replace(“存在、”, “、”))

    str1 = (str1.replace(“由来、”, “、”))

    str1 = (str1.replace(“、=”, “、”))

    str1 = (str1.replace(“-=”, “、”))

    str1 = (str1.replace(“--”, “、”))

    str1 = (str1.replace(“*#、”, “、”))

    str1 = (str1.replace(“¥#、”, “、”))

    str1 = (str1.replace(“、、、、、、”, “、”))

    str1 = (str1.replace(“、、、、、”, “、”))

    str1 = (str1.replace(“、、、、”, “、”))

    str1 = (str1.replace(“、、、”, “、”))

    str1 = (str1.replace(“、、”, “、”))   

    str1 = (str1.replace(“-、”, “、”))

    str1 = (str1.replace(“’’”, “、”))

    str1 = (str1.replace(“_”, “”))    # “、”を置換した”_”を消去

    # 結合

    str1_split = str1.split(“、”)    

    str1_list = “”

    for str2 in str1_split:

        if len(str2) > 1:

            if str2 not in str1_list:

                str1_list = str1_list + str2 + “、”            

    # print(n1,str1_list)

    claim2_list.append(str1_list)

# print(“claim2_list=”,claim2_list)

print(“claim2_list=”,claim2_list[0:1])

df20 = pd.DataFrame(data=claim2_list, columns=[‘要部構成単語’])

print(“要部構成単語を抽出しました。”)

# 重複を削除

bclaim_list=[]

for n,str1 in enumerate(claim2_list):

    str1_split = str1.split(“、”)    # 分割

    str2 = list(set(str1_split))    # 重複を削除 

    str3_list = “”

    for str3 in str2:

        str3_list=str3_list + str3 + “、”

    bclaim_list.append(str3_list)

# print(“bclaim_list=”,bclaim_list)

# 新規要素以外を削除

sinki_list0 =[]

for n1,str1 in enumerate(claim2_list):

    str1_split = str1.split(“、”)  

    str1_list = “”

    for str2 in str1_split:

        if str2 not in prart_list[n1]:

            str1_list = str1_list + str2 + “、”   

    if len(str1_list)==0:str1_list=”無し”    

    sinki_list0.append(str1_list)

# print(“sinki_list=”,sinki_list[0:10])

# 部分一致(製造と製造方法)を消去

sinki_list =[]

for n1,str1 in enumerate(sinki_list0):

    str1_split = str1.split(“、”)  

    str1_list = “”

    bn1=0

    bn2=0

    for n2,str2 in enumerate(str1_split):

        for n3,str3 in enumerate(str1_split):

            if len(str2)>0:

                if len(str3)>0:

                    if n2 != n3:

                        if str2 in str3:

                            if str2 in str3: 

                                bn1=n1

                                bn2=n2

                                bwrd=str2

                            if str3 in str2: 

                                bn1=n1

                                bn2=n3

                                bwrd=str3

        if bn2>0:

            # print(“消去ターム=”,bn1,bn2,bwrd)

            if str2 != bwrd:

                if str2 not in str1_list:

                    str1_list = str1_list + str2 + “、”   

    sinki_list.append(str1_list)

print(“sinki_list=”,sinki_list[0:10])

df21 = pd.DataFrame(data=sinki_list, columns=[“新規要素”])

print(“”)

print(“新規要素を抽出しました。”)

# step10 類似語削除

# 新規要素から従来技術に含まれていた単語の類似語を除去することにより、

# 新規要素を絞り込む。

# ゲシュタルトパターンマッチングにより類似度が0.8以上を類似語として除去。

# 従来の技術読み込み

part_data = pat_data.iloc[:,12]

bprart_list =[]

for str1 in part_data:

    if str(str1) != ‘nan’:

        #データ中の空白を削除

        str1 = (str1.replace(” “, “”))    # 半角空白を削除

        str1 = (str1.replace(“ ”, “”))    # 全角空白を削除

        str1 = (str1.replace(“に記載の”, “”))

        str1 = (str1.replace(“実質的”, “”))

        str1 = (str1.replace(“当たり”, “”))

        str1 = (str1.replace(“式中”, “”))        

        str1 = (str1.replace(“前記”, “”))

        str1 = (str1.replace(“前期”, “”))

        str1 = (str1.replace(“上記”, “”))

        str1 = (str1.replace(“下記”, “”))

        str1 = (str1.replace(“特徴”, “”))

        str1 = (str1.replace(“又は”, “、”))

        str1 = (str1.replace(“若しくは”, “、”))

        str1 = (str1.replace(“以上”, “、”))

        str1 = (str1.replace(“以下”, “、”))

        str1 = (str1.replace(“以外”, “、”))

        str1 = (str1.replace(“以内”, “、”))

        str1 = (str1.replace(“未満”, “”))

        str1 = (str1.replace(“超えて”, “”))

        str1 = (str1.replace(“使用”, “”))

        str1 = (str1.replace(“場合”, “、”))  

        str1 = (str1.replace(“含む”, “、”)) 

        str1 = (str1.replace(“個有”, “、”)) 

        str1 = (str1.replace(“乃至”, “、”)) 

        str1 = (str1.replace(“当たり”, “、”)) 

        str1 = (str1.replace(“当該”, “、”))

        str1 = (str1.replace(“分間”, “、”))

        str1 = (str1.replace(“員環”, “、”))

        str1 = (str1.replace(“%中和”, “中和”))

        str1 = (str1.replace(“た後”, “、”))        

        str1 = (str1.replace(“第一”, “”))

        str1 = (str1.replace(“第二”, “”))

        str1 = (str1.replace(“第ニ”, “”))

        str1 = (str1.replace(“第三”, “”))

        str1 = (str1.replace(“全部”, “”))

        str1 = (str1.replace(“一部”, “”))

        str1 = (str1.replace(“相当”, “”))

        str1 = (str1.replace(“複数”, “”))

        str1 = (str1.replace(“各々”, “”))

        str1 = (str1.replace(“=基”, “”))

        str1 = (str1.replace(“【化”, “”))

        str1 = (str1.replace(“カ所”, “”))

        str1 = (str1.replace(“具備”, “”))

        str1 = (str1.replace(“前者”, “”))

        str1 = (str1.replace(“後者”, “”))

        str1 = (str1.replace(“番目”, “”))

        str1 = (str1.replace(“任意”, “”))

        str1 = (str1.replace(“一方”, “”))

        str1 = (str1.replace(“他方”, “”))

        str1 = (str1.replace(“徐々”, “”))        

        str1 = (str1.replace(“【”, “、”)) 

        str1 = (str1.replace(“】”, “、”)) 

        str1 = (str1.replace(“[”, “、”))

        str1 = (str1.replace(“]”, “、”))

        str1 = (str1.replace(“[“, “、”))

        str1 = (str1.replace(“]”, “、”))        

        str1 = (str1.replace(“〔”, “、”))

        str1 = (str1.replace(“〕”, “、”))

        str1 = (str1.replace(“(”, “、”))

        str1 = (str1.replace(“)”, “、”))

        str1 = (str1.replace(“(“, “、”))    # 小文字削除

        str1 = (str1.replace(“)”, “、”))    # 小文字削除

        str1 = (str1.replace(“{”, “、”))

        str1 = (str1.replace(“}”, “、”))

        str1 = (str1.replace(“「”, “、”))

        str1 = (str1.replace(“」”, “、”))      

        str1 = (str1.replace(“<”, “、”))   

        str1 = (str1.replace(“>”, “、”))         

        str1 = (str1.replace(“。”, “、”))

        str1 = (str1.replace(“+”, “、”))

        str1 = (str1.replace(“Δ”, “、”))

        str1 = (str1.replace(“~”, “、”))

        str1 = (str1.replace(“/”, “、”))

        str1 = (str1.replace(“=”, “、”))

        str1 = (str1.replace(“=”, “、”))

        str1 = (str1.replace(“≦”, “、”)) 

        str1 = (str1.replace(“-、”, “、”))

        str1 = (str1.replace(“、-”, “、”))

        str1 = (str1.replace(“’’”, “、”))

        str1 = (str1.replace(“’”, “、”))

        str1 = (str1.replace(“°”, “、”))

        str1 = (str1.replace(“-“, “、”))

        str1 = (str1.replace(“;”, “、”))

        str1 = (str1.replace(“:”, “、”))

        str1 = (str1.replace(“・”, “、”))

        str1 = (str1.replace(“,”, “、”))

        str1 = (str1.replace(“*-”, “、”))

        str1 = (str1.replace(“…”, “、”))

        str1 = (str1.replace(“α”, “、”))

        str1 = (str1.replace(“γ”, “、”))

        str1 = (str1.replace(“δ”, “、”))

        str1 = (str1.replace(“θ”, “、”))

        str1 = (str1.replace(“ω”, “、”))

        str1 = (str1.replace(“η”, “、”))

        str1 = (str1.replace(“ξ”, “、”))

        str1 = (str1.replace(“φ”, “、”))

        str1 = (str1.replace(“∞”, “、”))

        str1 = (str1.replace(“μ”, “、”))

        str1 = (str1.replace(“Ω”, “、”))

    else:

        str1 = ‘無し。’      

    str1 = re.sub(r”[あ-ん]”, “、”, str1)  #ひらがな除去

    str1 = re.sub(r”[a-z]”, “、”, str1)  #半角小文字

    str1 = re.sub(r”[a-z]”, “、”, str1)  #全角小文字

    str1 = re.sub(r”[A-Z]”, “、”, str1)  #半角大文字

    str1 = re.sub(r”[A-Z]”, “、”, str1)  #全角大文字    

    str1 = re.sub(r”[0-9]”, “、”, str1)  #数字除去

    str1 = re.sub(r”[0-9]”, “、”, str1)  #数字除去

    str1 = (str1.replace(“含有、”, “”))

    str1 = (str1.replace(“-基”, “、”))

    str1 = (str1.replace(“、-”, “、”))

    str1 = (str1.replace(“中、”, “、”))

    str1 = (str1.replace(“~、”, “、”))

    str1 = (str1.replace(“存在、”, “、”))

    str1 = (str1.replace(“由来、”, “、”))

    str1 = (str1.replace(“、=”, “、”))

    str1 = (str1.replace(“-=”, “、”))

    str1 = (str1.replace(“--”, “、”))

    str1 = (str1.replace(“*#、”, “、”))

    str1 = (str1.replace(“¥#、”, “、”))

    str1 = (str1.replace(“、、、、、、”, “、”))

    str1 = (str1.replace(“、、、、、”, “、”))

    str1 = (str1.replace(“、、、、”, “、”))

    str1 = (str1.replace(“、、、”, “、”))

    str1 = (str1.replace(“、、”, “、”))

    # 単語の先頭から「該」を削除

    str1_split = str1.split(“、”)    

    str1_list = “”

    for n1,str2 in enumerate(str1_split):

        if len(str2) > 1:

            if “、該” in str2:str2 = (str2.replace(“、該”, “、”))

            str1_list = str1_list + str2 + “、”   

    bprart_list.append(str1_list)

# print(bprart_list)

# 類似語を抽出(ゲシュタルトパターンマッチングを使用)

ruiji_list =[]

for n1,str1 in enumerate(sinki_list):

    str1_split = str1.split(“、”)  

    str1_list = “”

    for str2 in str1_split:    # sinki_listのn1行を読み込み、単語に分割

        if str(str2) != “nan”:

            str2_split = str2.split(“、”) 

            for str3 in str2_split: 

                # print(“str3=”,str3)    # sinki_listの単語

                str4=bprart_list[n1]    # 従来技術のn1行を読み込み、単語に分割

                str4_split = str4.split(“、”) 

                for str5 in str4_split:       # 従来技術から類似語を抽出

                    # print(“str5=”,str5)    # 従来技術の単語

                    if str5 != “”:    

                        # ゲシュタルトパターンマッチング

                        gestalt1 = difflib.SequenceMatcher(None, str3, str5).ratio()

                        if gestalt1> 0.8:

                            # 確認

                            # print(n1,str3, str5,”gestalt1=”,gestalt1)

                            if len(str3)>1:

                                if str3 not in str1_list:

                                    str1_list = str1_list + str3 + “、”   

    if len(str1_list) > 1:

        ruiji_list.append(str1_list)

    else:

        # print(“類似語無し”)

        ruiji_list.append(“類似語無し”)

print(len(ruiji_list),”件”)

print(“ruiji_list=”,ruiji_list[0:50])                

# 類似語を削除

bclaim_list=[]

for n1,str1 in enumerate(sinki_list):

    str2=ruiji_list[n1]

    if str(str2) != “類似語無し”:

        str2_split = str2.split(“、”) 

        for str3 in str2_split:       

            if str3 in str1:

                str1 = (str1.replace(str3, “”))

    str1 = (str1.replace(“、、、、”, “、”))

    str1 = (str1.replace(“、、、”, “、”))

    str1 = (str1.replace(“、、”, “、”))

    str1 = (str1.replace(“、、”, “、”))

    if str(str1) == “nan”:

        str1= “無し”      

    if str1 == “、”:

        str1= “無し”   

    bclaim_list.append(str1)

# print(“bclaim_list=”,bclaim_list)

# 1文字を削除

claim3_list=[]

for n1,str1 in enumerate(bclaim_list):

    str1_split = str1.split(“、”) 

    str2_list=””

    for str2 in str1_split:

        if len(str2) > 1:

            str2_list=str2_list + str2 + “、”

    if len(str2_list) > 0:

        claim3_list.append(str2_list)

    else:

        claim3_list.append(“無し”)

# print(“claim3_list=”,claim3_list)

# DataFrame化

df20 = pd.DataFrame(data=claim2_list, columns=[‘要部構成単語’])

df21 = pd.DataFrame(data=sinki_list, columns=[‘新規要素’])

df22 = pd.DataFrame(data=ruiji_list, columns=[‘類似語’])

df23 = pd.DataFrame(data=claim3_list, columns=[‘類似語除去後新規要素’])  

print(“”)

print(“類似語を削除しました。”)

# step11 主要構成要件抽出

# 請求項1を「、」で分離して構成要件を抽出し、

# 抽出された各構成要件に類似語除去後新規要素がいくつ含まれているかを算出し、

# 類似語除去後新規要素が含まれている数が多い構成要件を主要構成要件とみなし、

# この主要構成要件を「課題・新規要素付き公報data.xlsx」に追記する。

# データ読み込み

pat_data = pd.read_excel(‘書誌・課題・新規要素・主要構成data.xlsx’, sheet_name=’書誌・課題・新規要素・主要構成’)

# claim_list =[]

claim1_mk_list =[]

for n1,str1 in enumerate(bclaim1_list):    

    if str1[0]==”、”: str1 = str1[1:]

    claim1_mk_list.append(str1)

# print(claim1_mk_list)     

# 類似語除去後新規要素読み込み

kosei_list = []

for str1 in claim3_list:

    kosei_list.append(str1)

# print(kosei_list)

# 抽出された各構成要件に類似語除去後新規要素がいくつ含まれているかを算出

# (要部構成)、(修正無し)、(式の説明は消去)はカウント対象外

mainkosei_list = []

for n1,str1 in enumerate(bclaim1_list):    

    sikiflg=0

    if “化合物” in str1: sikiflg=1

    if “一般式” in str1: sikiflg=1

    if “下記式” in str1: sikiflg=1

    if “式中” in str1: sikiflg=1

    if “高分子” in str1: sikiflg=1

    if “単量体” in str1: sikiflg=1

    if “組成物” in str1: sikiflg=1

    if “質量部” in str1: sikiflg=1

    if “分子量” in str1: sikiflg=1

    if “共重合体” in str1: sikiflg=1

    if “リポ蛋白” in str1: sikiflg=1

    if “化合物” in str1: sikiflg=1   

    if “モル比” in str1: sikiflg=1 

    if “モル%” in str1: sikiflg=1

    if “モル数” in str1: sikiflg=1

    if “質量%” in str1: sikiflg=1

    # print(“sikiflg=”,sikiflg)

    str1_split = str1.split(“、”)    # 分割

    nnmax = 0

    bn1=0

    bn2=0

    bstr1=””

    for n2,str2 in enumerate(str1_split):             

        # 「ことを特徴とする」以下を削除

        if “ことを特徴とする” in str2:

            npos01= str2.find(“ことを特徴とする”)

            npos02=len(str2)

            if (npos02-npos01)<30:

                str2=str2[0:npos01]

        # “。、”を”。”に戻す

        str2 = str2.replace(“。、”, “。”)

        bkosei = kosei_list[n1]

        if bkosei !=”nan”:

            kosei_split = bkosei.split(“、”)    # 分割

        nn = 0

        for n3,str3 in enumerate(kosei_split):          

            if len(str(str3)) > 1:

                if str3 in str2: 

                    nn = nn + 1

                    if  “コンピュータ” in str3: nn=nn-1

        if nn > nnmax:    # 最初のnnmaxを採用

            nnmax = nn

            bn1=n2

        if nn == nnmax:    # 最後のnnmaxを採用

            bn2 = n2

    # 代替え構成があれば、”【化”などは不採用

    if bn2>0:    # 

        if  “【化” in str1_split[bn2]:

            # 確認

            # print(“最初のnnmax=”,bn1,str1_split[bn1])

            bn2=bn1

        if  “コンピュータ” in str1_split[bn2]:

            bn2=bn1

    # 確認

    # print(“bn1=”,bn1,”bn2=”,bn2)

    # print(n1,”主要構成要件=”,str1_split[bn2],nnmax)       

    if nnmax < 2:    # nnmaxが少なければ元の請求項1を採用

        bstr1 =bclaim1_list[n1]

    if nnmax == 2:    # nnmaxが2でかつ短文であれば元の請求項1を採用

        if len(str1_split[bn2])<30:

            bstr1 =bclaim1_list[n1]

        else:

            bstr1= str1_split[bn2]

    if nnmax > 2: 

        bstr1 = str1_split[bn2]

    # 要部構成が長文のため字数制限されていた場合は主要構成要件を「不明」とする

    if “・・・・・・” in str1: 

        if “(不明)” not in bstr1: bstr1=”(不明)” + bstr1  

    if bstr1==””: bstr1=bclaim1_list[n1]

    if bstr1[0]==”、”: bstr1 = bstr1[1:]        

    # 文頭が「式」は(式の説明は消去)を書き戻す

    if bstr1[0:1]==”式”: 

        bstr1=”(式の説明は消去)”+bstr1

    # “下記式”、”上記式”が含まれていれば”(式の説明は消去)”を追加

    flg=0

    if “(式の説明は消去)” not in bstr1:

        if “一般式” in bstr1: flg=1

        if “下記式” in bstr1: flg=1

        if “上記式” in bstr1: flg=1

        if “【化” in bstr1: flg=1

        if flg==1: bstr1=”(式の説明は消去)”+bstr1

    # 短文でかつ化学関連は「不明」を追加。ただし、str1と同じ長さなら「不明」とせず。

    flg=0

    bwrd=str1.replace(“、”,””)

    np01=len(bwrd)

    np02=len(bstr1)

    if abs(np01-np01-2)<5:

        if len(bstr1)<60:

            if sikiflg==1:

                if “(式の説明は消去)” in bstr1:

                    bstr1=bstr1.replace(“(式の説明は消去)”, “”)

                    if “(不明)” not in bstr1: bstr1=”(不明)” + bstr1

    # 短文でかつ「次の条件」を含む場合は「不明」を追加。ただし、str1と同じ長さなら「不明」とせず。

    flg=0

    bwrd=str1.replace(“、”,””)

    np01=len(bwrd)

    np02=len(bstr1)

    if abs(np01-np01-2)<5:

        if len(bstr1)<60:

            if “次の条件” in bstr1:

                if “(式の説明は消去)” in bstr1:

                    bstr1=bstr1.replace(“(式の説明は消去)”, “”)

                    if “(不明)” not in bstr1: bstr1=”(不明)” + bstr1                        

    # 最終のbstr1が正味が20文字以内なら(修正無し)

    bwrd=bstr1.replace(“(式の説明は消去)”, “”)

    bwrd=bwrd.replace(“(要部構成)”, “”)

    bwrd=bwrd.replace(“(修正無し)”, “”)

    if len(bwrd)<20:

        if “式”  not in str1:

            if “(修正無し)” not in str1:

                bstr1=”(修正無し)”+str1

        else:

            bstr1=str1    

    mainkosei_list.append(bstr1)

# print(mainkosei_list[0:5])

df24 = pd.DataFrame(data=mainkosei_list, columns=[“主要構成要件”])

# 結合/請求項1~主要構成要件を追加

df40=pd.concat([df30,df18,df19,df20,df21,df22,df23,df24], axis=1)

print(df40[0:1])

# dataframeをarrayに変換

arr1 = df40.values

# print(“arr1=”,arr1[0:1])

# Exce(xlsx)に書き出し

# ヘッダ作成

header_list =[[‘公報番号’,’出願番号’,’発行日’,’発明の名称’,’出願人’,’発明者’,

               ‘IPC’,’FI’,’Fターム’,’要約’,’発明の目的’,’利用分野’,

               ‘従来の技術’,’発明の効果’,’課題’,’課題コード’,’課題KW’,

               ‘請求項1′,’要部構成’,’要部構成単語’,’新規要素’,’類似語’,

               ‘類似語除去後新規要素’,’主要構成要件’]]

# file_name = ‘書誌・課題・新規要素・主要構成data.xlsx’

file_name = apmini+”課題・主要構成.xlsx”

# ブックを作成

book = openpyxl.Workbook()

# シートを追加

ws = book.create_sheet(title=’書誌・課題・新規要素・主要構成’)

# Excelシート「Sheet」を削除

del book[‘Sheet’]

# 保存する

book.save(file_name)

#  file_nameのbookを指定

wb = openpyxl.load_workbook(file_name)

def write_list_1d(sheet, l_1d, start_row, start_col):

    for y, row in enumerate(l_1d):

        for x, cell in enumerate(row):

            sheet.cell(row=start_row + y,

                       column=start_col + x,

                       value=l_1d[y][x])

sheet = wb[‘書誌・課題・新規要素・主要構成’]

write_list_1d(sheet, header_list, 1, 1)    # ヘッダを1行目1列目に書き込み

write_list_1d(sheet, arr1, 2, 1)    # シート名「sheet」の1行目1列目からarr1の内容を書き込み

wb.save(file_name)                     # ファイル「file_name」に保存

# print(df034[0:1])

print(“”)

print(file_name+’課題・主要構成を書き出しました。’)   

print(“終了しました”)