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

KW別の課題・主要構成ファイル一括作成プログラム

/


# キーワード別の課題・主要構成ファイル一括作成

#/

# スクリプト1 指定したキーワードを含む公報データを一括して集めて書き出す

## フォルダ「課題・対策data」内の複数データから入力したキーワードを含む公報データを抽出し、

## 課題、主要構成を含む公報データをフォルダ「(検索KW)+課題・主要構成」に書き出す

import pandas as pd

import numpy as np

import os

import shutil

import openpyxl

import difflib

# 改良する技術内容を入力

test_txt = input(“改良したい現在の技術内容は、”)    # 改良する技術内容を入力

# test_txt = “点検すべき設備をリストにしてセンターに保持しておき、点検者がセンターから点検設備リストを携帯するモバイル端末に受信して画面に表示させ、表示にしたがって点検者が順番に点検を行い、点検結果をモバイル端末に入力すると、点検結果がセンターに送信される。”

# print(“改良したい現在の技術内容は、”,test_txt)

# 絞り込むキーワードを入力

keywrd = input(“絞り込むキーワードは(入力例:携帯;モバイル)、”)    # 絞り込むキーワードを入力

# keywrd = “点検”

# print(“絞り込むキーワード=”,keywrd)

## 公報データ読み込み ##

# デスクトップ上の「課題・対策data」(88社のデータ)内のフォルダ名取得

pass1=”/Users/yamaguchi/Desktop/課題・対策data”

files1=os.listdir(pass1)

files1_list=[]

# 「」の下位フォルダに含まれているファイル名取得

# print(“読み込むファイル名”)

files_list=[]

for str1 in files1:

    # print(str1)

    if str(str1) !=”nan”:

        if “.xlsx” in str1:     # .xlsxを読み込む

            if str1[0:1] != “~”:

                # print(str1)

                files_list.append(str1)

print(“読み込むファイル数=”,len(files_list))               

print(“読み込むファイル名[0:5]=”,files_list[0:5])

print(“”)

print(“課題コードの処理結果”)

# 課題・対策data内のファイルからkeywrdを含む公報を抽出

keywrd_list=[]

corpcd_list=[]

srcd_list2=[]

code2_list=[]

kw2_list=[]

yobu2_list=[]

shinki2_list=[]

main2_list=[]

pn2_list=[]

ti2_list=[]

ab2_list=[]

bunya2_list=[]

jurai2_list=[]

kouka2_list=[]

kadai2_list=[]

claim1_2_list=[]

ntot=0

for n1, str1 in enumerate(files_list):    # files1_list=課題・対策data内のファイル名

    corpcd=str1    # ファイル名

    corp=”/” + str1    # 読み込むファイル名のパス

    pat_data=pd.read_excel(pass1+corp,sheet_name=”書誌・課題”)

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

    ## 公報データ読み込み ##

    # 課題コード読み込み

    code_data=pat_data.iloc[:,18]

    code_list = code_data.values    # リスト化

    # 課題KW読み込み

    kw_data=pat_data.iloc[:,19]

    kw_list = kw_data.values    # リスト化

   # 要部構成単語読み込み

    yobu_data=pat_data.iloc[:,20]

    yobu_list = yobu_data.values    # リスト化

    # 新規要素

    shinki_data=pat_data.iloc[:,21]

    shinki_list = shinki_data.values    # リスト化

    # 主要構成読み込み

    main_data=pat_data.iloc[:,24]

    main_list = main_data.values    # リスト化    

    # 公報番号欄読み込み

    pn_data=pat_data.iloc[:,0] 

    pn_list = pn_data.values    # リスト化

    # 発明の名称読み込み

    ti_data=pat_data.iloc[:,3]

    ti_list = ti_data.values    # リスト化

    # 要約読み込み

    abst_data=pat_data.iloc[:,9]

    abst_list = abst_data.values    # リスト化

    # 利用分野読み込み

    bunya_data=pat_data.iloc[:,11]

    bunya_list = bunya_data.values    # リスト化

    # 従来の技術読み込み

    jurai_data=pat_data.iloc[:,12]

    jurai_list = jurai_data.values    # リスト化

    # 発明の効果読み込み

    kouka_data=pat_data.iloc[:,13]

    kouka_list = kouka_data.values    # リスト化

    # 課題読み込み

    kadai_data=pat_data.iloc[:,14]

    kadai_list = kadai_data.values    # リスト化

    # 請求項1読み込み

    claim1_data=pat_data.iloc[:,15]

    claim1_list = claim1_data.values    # リスト化

    # 発明の名称から請求項1までを結合

    patwrd_list=[]

    for n2, str2 in enumerate(pn_list):

        patwrd_list.append(str(str2)+ti_list[n2]+str(abst_list[n2])+

                       str(bunya_list[n2])+str(jurai_list[n2])+

                        str(kouka_list[n2])+str(kadai_list[n2])+str(claim1_list[n2]))

    print(corpcd,”公報件数=”,len(patwrd_list))

    # nhit=0

    # nn_list=[]    # 検索対象のキーワードを含む公報Noを企業毎にリセット

    # print(“srcd_list=”,srcd_list)

    for n3, str3 in enumerate(patwrd_list):    # patwrd_list=明の名称から請求項1まで

        # print(pn_list[n3])

        if keywrd in str3:

            corpcd_list.append(corpcd)     # ファイル名

            keywrd_list.append(keywrd)    # 検索KW

            code2_list.append(code_list[n3])    # 課題コード

            kw2_list.append(kw_list[n3])    # 課題KW                    

            yobu2_list.append(yobu_list[n3])    # 要部構成単語 shinki_data

            shinki2_list.append(shinki_list[n3])    # 新規要素

            main2_list.append(main_list[n3])    # 主要構成要件     

            pn2_list.append(pn_list[n3])    # 公報番号

            ti2_list.append(ti_list[n3])              # 発明の名称

            ab2_list.append(abst_list[n3])    # 要約

            bunya2_list.append(bunya_list[n3])    # 利用分野

            jurai2_list.append(jurai_list[n3])    # 従来の技術

            kouka2_list.append(kouka_list[n3])    # 発明の効果

            kadai2_list.append(kadai_list[n3])    # 課題

            claim1_2_list.append(claim1_data[n3])    # 請求項1

            # print(pn_list[n3])

print(“”)

print(“ヒット件数の合計=”,len(pn2_list))

# 類似語を抽出(ゲシュタルトパターンマッチング)

# ゲシュタルトパターンマッチングにより類似度が0.8以上を類似語として除去

# n_list = []

rgd_list =[]

for n1,str1 in enumerate(ab2_list):

    # ゲシュタルトパターンマッチング

    gestalt1 = difflib.SequenceMatcher(None, str1, str(test_txt)).ratio()

    rgd_list.append(gestalt1)

# print(len(rgd_list),”rgd_list=”,rgd_list)

print(“類似度[0:3]=”,rgd_list[0:3])

# df化

df01=pd.DataFrame(data=corpcd_list,columns=[“ファイル名”])

df02=pd.DataFrame(data=keywrd_list,columns=[“検索KW1”])

df03=pd.DataFrame(data=code2_list,columns=[“課題コード”])

df04=pd.DataFrame(data=kw2_list,columns=[“課題KW”])

df05=pd.DataFrame(data=yobu2_list,columns=[“要部構成単語”])

df06=pd.DataFrame(data=shinki2_list,columns=[“新規要素”])

df07=pd.DataFrame(data=main2_list,columns=[“主要構成”])

df08=pd.DataFrame(data=pn2_list,columns=[“公報番号”])

df09=pd.DataFrame(data=ti2_list,columns=[“発明の名称”])

df10=pd.DataFrame(data=ab2_list,columns=[“要約”])

df11=pd.DataFrame(data=bunya2_list,columns=[“利用分野”])

df12=pd.DataFrame(data=jurai2_list,columns=[“従来の技術”])

df13=pd.DataFrame(data=kouka2_list,columns=[“発明の効果”])

df14=pd.DataFrame(data=kadai2_list,columns=[“課題”])

df15=pd.DataFrame(data=claim1_2_list,columns=[“請求項1”])

df16 = pd.DataFrame(data=rgd_list, columns=[‘類似度’])

# 横に結合

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

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

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

# ソート

# df30 = df30.sort_values(‘類似度’, ascending=True)    # 昇順

# 降順にソート

df30=df30.sort_values(‘類似度’,ascending=False)

# dataframeをarrayに変換

arr1 = df30.values    # リスト化

# print(len(arr1))

# print(arr1)

# 書き出すフォルダを作成

folder1=keywrd+”課題・主要構成”

try:

    os.makedirs(folder1)

except FileExistsError:

    pass

if len(arr1)>0:

    # ブックを作成

    book=openpyxl.Workbook()

    # シートを追加

    sheetname=”課題・主要構成”

    ws=book.create_sheet(title=sheetname) 

    # 不要な「sheet」を削除

    del book[“Sheet”]

    # 保存

    book.save(folder1+”/”+keywrd+”課題・主要構成.xlsx”)    # keywrd:検索KW

    # 書き出すフォルダを作成

    book.save(keywrd+”課題・主要構成.xlsx”)

    # Excel(xlsx)に書く出し

    # ヘッダ作成

    header_list=[[“ファイル名”,”検索KW1″,”課題コード”,”課題KW”,”要部構成単語”,”新規要素”,”主要構成”,

                  “公報番号”,”発明の名称”,”要約”,”利用分野”,”従来の技術”,

                  “発明の効果”,”課題”,”請求項1″,”類似度”]]

    file_name=folder1+”/”+keywrd+”課題・主要構成.xlsx”    # keywrd:課題コード

    # file_name=keywrd+”課題・主要構成.xlsx”

    # print(“file_name=”,file_name)

    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[sheetname]

    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」に保存

if len(arr1)>0:

    print(len(df30),”件書き出しました”)

    print(“”)

else:

    print(“該当公報はありませんでした”)

    print(“”)

print(“「”+keywrd+”」を含む公報データ(課題、主要構成を含む)をフォルダ「(検索キーワード)+課題・主要構成」に書き出しました”)

#/

# step2 入力した「改良したい現在の技術内容」を保存

# フォルダ「(KW)+課題・主要構成」のファイル「課題・主要構成.xlsx」を指定

file_name=folder1+”/”+keywrd+”課題・主要構成.xlsx”    # keywrd:課題コード

# 書き出すbookを指定

wb = openpyxl.load_workbook(file_name)

# シートを追加

ws = wb.create_sheet(title=’test_txt’)

# 保存

wb.save(file_name) 

# 書き出すbookを指定

wb = openpyxl.load_workbook(file_name)

# シートを取得

sheet = wb[‘test_txt’]

# セルへ書き込む

sheet[‘A1’] = test_txt    # test_txtを書き出し

# 保存

wb.save(file_name) 

print(“test_txtを書き出しました”) 

print(“”)

#/

# step3 課題・主要構成に含まれている課題コードを抽出

# 読み込むファイル名を指定

folder1=keywrd+”課題・主要構成”

file1_name = folder1 + “/” + keywrd+”課題・主要構成.xlsx”

# 課題・主要構成読み込み

pat_data=pd.read_excel(file1_name,sheet_name=”課題・主要構成”)

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

# 課題・主要構成の課題コード読み込み

kmcode_data = pat_data.iloc[:,2]    # 課題・主要構成の課題コード

kmcode_list = kmcode_data.values    # リスト化

# print(“課題・主要構成の課題コード[0:3]=”,kmcode_list[0:3])

# リスト化

kmcode_list = []

for str1 in kmcode_data:

    str1 = str(str1)

    str1_list = str1.split(“;”)

    for str2 in str1_list:

        kmcode_list.append(str(str2))

# print(len(kmcode_list))

# 重複を削除 

kmcode_list = list(set(kmcode_list))    # 重複を削除 

# print(len(kmcode_list))

# print(kmcode_list[0:3])

# ソート

kmcode_list = sorted(kmcode_list)

# print(len(kmcode_list))

print(“課題・主要構成の課題コード=”,kmcode_list[0:3])

# 降順課題コード表の課題コード表読み込み

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

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

# 降順課題コード表の課題コードでソート

kadai_data=kadai_data.sort_values(‘課題コード’)

# print(“課題コード表の課題コード[0:3]=”,kadai_data[0:3])

# 降順課題コード表の課題コード読み込み

code_data=kadai_data.iloc[:,5]

code_list = code_data.values    # リスト化

print(“課題コード[0:3]=”,code_list[0:3])

# 降順課題コード表の課題KW読み込み

kw_data=kadai_data.iloc[:,4]

kw_list = kw_data.values    # リスト化

print(“課題KW[0:3]=”,kw_list[0:3])

print(“”)

# 課題・主要構成の課題コードに降順課題コード表の課題KWを付加

ncd1 = 100

cdwd_list = []

for n1, str1 in enumerate(kmcode_list):   # 課題・主要構成の課題コード

    str1 =str(str1)

    for n2, str2 in enumerate(code_list):   # 

        str2 =str(str2)

        if str1 == str2:

            # print(str1,kw_list[n2])

            cdwd_list.append(str1 + “:” + kw_list[n2])

            if len(str1) < ncd1: ncd1 = len(str1)

            break

print(“抽出課題コード数=”,len(cdwd_list))         

print(“課題コード+課題KW=”,cdwd_list[0:3])

print(“最小の課題コード長=”,ncd1)

print(“”)

# 整形(ヒットコードの階層の差に応じ、ヒットコードの前にブランクを挿入)

bcdwd_list = []

for n1,str1 in enumerate(cdwd_list):

    bcdwd = str1.split(“:”)    # 分割

    bcd1 = str(bcdwd[0])

    # print(bcd1)

    if len(bcd1) – ncd1 == 0: wd = “”

    if len(bcd1) – ncd1 == 1: wd = “    ”

    if len(bcd1) – ncd1 == 2: wd = “    ”

    if len(bcd1) – ncd1 == 3: wd = “        ”

    if len(bcd1) – ncd1 == 4: wd = “        ”    

    if len(bcd1) – ncd1 == 5: wd = “            ”

    if len(bcd1) – ncd1 == 6: wd = “            ” 

    if len(bcd1) – ncd1 == 7: wd = “                ”

    if len(bcd1) – ncd1 == 8: wd = “                ” 

    if len(bcd1) – ncd1 == 9: wd = “                    ”

    if len(bcd1) – ncd1 == 10: wd = “                    ” 

    if len(bcd1) – ncd1 == 11: wd = “                        ”

    if len(bcd1) – ncd1 == 12: wd = “                        ”         

    if len(bcd1) – ncd1 == 13: wd = “                            ”

    if len(bcd1) – ncd1 == 14: wd = “                            ”

    if len(bcd1) – ncd1 == 15: wd = “                                ”

    if len(bcd1) – ncd1 == 16: wd = “                                ”

    bstr1 = wd + str(str1)

    # print(bstr1)

    bcdwd_list.append(bstr1)

# print(“抽出課題=”,bcdwd_list[0:3])

# DataFrame化

df1 = pd.DataFrame(data=bcdwd_list, columns=[‘課題コード・課題KW’])

# dataframeをarrayに変換

arr1 = df1.values

# 書き出すbookを指定

wb = openpyxl.load_workbook(file_name)

# シートを追加

ws = wb.create_sheet(title=’課題コード・課題KW’)

# 保存

wb.save(file_name) 

if len(arr1)>0:

    # 書き出すbookを指定

    wb = openpyxl.load_workbook(file1_name)

    # シートを追加

    sheetname=”課題コード・課題KW”

    ws=book.create_sheet(title=sheetname) 

    # 保存

    wb.save(folder1+”/”+keywrd+”課題・主要構成.xlsx”)    # keywrd:検索KW

    # 書き出すフォルダを作成

    wb.save(keywrd+”課題・主要構成.xlsx”)

    # Excel(xlsx)に書く出し

    # ヘッダ作成

    header_list=[[“課題コード+検索KW”]]

    file_name=folder1+”/”+keywrd+”課題・主要構成.xlsx”    # keywrd:課題コード

    # file_name=keywrd+”課題・主要構成.xlsx”

    # print(“file_name=”,file_name)

    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[sheetname]

    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(“フォルダ「” + folder1+ “」の” + “「課題・主要構成.xlsx」に課題コード+検索KWを書き出しました”)

#/

# step4 新たなキーワード検索により更に絞り込む

# 読み込むファイル名を指定

folder1=keywrd+”課題・主要構成”

file1_name = folder1 + “/” + keywrd+”課題・主要構成.xlsx”

# 課題・主要構成読み込み

kmp_data=pd.read_excel(file1_name,sheet_name=”課題・主要構成”)

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

# print(“kmp_data=”,len(kmp_data))

# リスト化

kmp_list = kmp_data.values    # リスト化

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

# keywrd+課題・主要構成の技術内容読み込み

# 発明の名称読み込み

ti_data2=kmp_data.iloc[:,8]

ti_list2 = ti_data2.values    # リスト化

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

# 要約読み込み

abst_data2=kmp_data.iloc[:,9]

abst_list2 = abst_data2.values    # リスト化

# 利用分野読み込み

bunya_data2=kmp_data.iloc[:,10]

bunya_list2 = bunya_data2.values    # リスト化

# 従来の技術読み込み

jurai_data2=kmp_data.iloc[:,11]

jurai_list2 = jurai_data2.values    # リスト化

# 発明の効果読み込み

kouka_data2=kmp_data.iloc[:,12]

kouka_list2 = kouka_data2.values    # リスト化

# 課題読み込み

kadai_data2=kmp_data.iloc[:,13]

kadai_list2 = kadai_data2.values    # リスト化

# 請求項1読み込み

claim1_data2=kmp_data.iloc[:,14]

claim1_list2 = claim1_data2.values    # リスト化

# 発明の名称から請求項1までを結合

patwrd_list2=[]

for n1, str1 in enumerate(ti_list2):

    patwrd_list2.append(str1+str(abst_list2[n1])+str(bunya_list2[n1])+

                    str(jurai_list2[n1])+str(kouka_list2[n1])+

                    str(kadai_list2[n1])+str(claim1_list2[n1]))

# print(“公報件数=”,len(patwrd_list2))

# 公報件数が設定値1より多い場合には新たなキーワードで検索

if len(kmp_data) > 500:    # 設定値1

   # 絞り込むキーワードを入力

    keywrd2 = input(“更に絞り込むキーワードは(入力例:センタ;送信;受信;ネット)、”)    # 絞り込むキーワードを入力

    # keywrd2 = “センタ;送信;受信;ネット”

    # print(“絞り込むキーワード=”,keywrd2) 

    # 新たなキーワードで検索

    srkw = []

    newkmp_list = []

    for n2,str2 in enumerate(patwrd_list2):    # 発明の名称から請求項1までの結合データ

        # str2 = str(str2)

        kwd2 = keywrd2.split(“;”)

        # print(str(kwd2))

        for n3,str3 in enumerate(kwd2):

            # print(str3)    # キーワード

            if str3 in str2:

                # print(n2,str2)

                # print(n2,kmp_list[n2])

                # newkmp_list.append(patwrd_list2[n2])

                newkmp_list.append(kmp_list[n2])

                srkw.append(keywrd2)

                break

    print(“絞り込み後の件数=”,len(newkmp_list))

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

    # フォルダ「(KW)+課題・主要構成」のファイル「課題・主要構成.xlsx」を指定

    file_name=folder1+”/”+keywrd+”課題・主要構成.xlsx”    # keywrd:課題コード   

    # print(file_name)

    # DataFrame化

    df1 = pd.DataFrame(data=newkmp_list)

    df2 = pd.DataFrame(data=srkw, columns=[“追加検索KW1”])

    # 横に結合

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

    # dataframeをarrayに変換

    arr1 = df40.values    # リスト化

    # 書き出すbookを指定

    wb = openpyxl.load_workbook(file_name)

    # シートを追加

    sheetname=”new課題・主要構成KW1″

    ws = wb.create_sheet(title=sheetname)

    # 保存

    wb.save(file_name) 

    # Excel(xlsx)に書き出し

    # ヘッダ作成

    header_list=[[“ファイル名”,”検索KW”,”課題コード”,”課題KW”,”要部構成単語”,”新規要素”,”主要構成”,

                  “公報番号”,”発明の名称”,”要約”,”利用分野”,”従来の技術”,

                  “発明の効果”,”課題”,”請求項1″,”類似度”,”追加検索KW1″]]

    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[sheetname]

    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(“フォルタ名=”,folder1)

print(“ファイル名= “,keywrd,”課題・主要構成.xlsx”)

print(“”)

print(“フォルダ「” + folder1+ “」内のファイル「keywrd+課題・主要構成.xlsx」のシート「new課題・主要構成1」に課題コード+検索KWを書き出しました”)

#/

# step5 再度、課題・主要構成に含まれている課題コードを抽出

# 読み込むファイル名を指定

folder1=keywrd+”課題・主要構成”

file1_name = folder1 + “/” + keywrd+”課題・主要構成.xlsx”

# 課題・主要構成読み込み

pat_data=pd.read_excel(file1_name,sheet_name=”new課題・主要構成KW1″)

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

print(“課題・主要構成の件数=”,len(pat_data))

# 課題・主要構成の課題コード読み込み

kmcode_data = pat_data.iloc[:,2]    # 課題・主要構成の課題コード

kmcode_list = kmcode_data.values    # リスト化

# print(“課題・主要構成の課題コード[0:3]=”,kmcode_list[0:3])

# リスト化

kmcode_list = []

for str1 in kmcode_data:

    str1 = str(str1)

    str1_list = str1.split(“;”)

    for str2 in str1_list:

        kmcode_list.append(str(str2))

# print(len(kmcode_list))

# 重複を削除 

kmcode_list = list(set(kmcode_list))    # 重複を削除 

# print(len(kmcode_list))

# print(kmcode_list[0:3])

# ソート

kmcode_list = sorted(kmcode_list)

# print(len(kmcode_list))

print(“new課題・主要構成KW1の課題コード=”,kmcode_list[0:3])

# 降順課題コード表の課題コード表読み込み

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

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

# 降順課題コード表の課題コードでソート

kadai_data=kadai_data.sort_values(‘課題コード’)

# print(“課題コード表の課題コード[0:3]=”,kadai_data[0:3])

# 降順課題コード表の課題コード読み込み

code_data=kadai_data.iloc[:,5]

code_list = code_data.values    # リスト化

print(“課題コード[0:3]=”,code_list[0:3])

# 降順課題コード表の課題KW読み込み

kw_data=kadai_data.iloc[:,4]

kw_list = kw_data.values    # リスト化

print(“課題KW[0:3]=”,kw_list[0:3])

print(“”)

# 課題・主要構成の課題コードに降順課題コード表の課題KWを付加

ncd1 = 100

cdwd_list = []

for n1, str1 in enumerate(kmcode_list):   # 課題・主要構成の課題コード

    str1 =str(str1)

    for n2, str2 in enumerate(code_list):   # 

        str2 =str(str2)

        if str1 == str2:

            # print(str1,kw_list[n2])

            cdwd_list.append(str1 + “:” + kw_list[n2])

            if len(str1) < ncd1: ncd1 = len(str1)

            break

print(“抽出課題コード数=”,len(cdwd_list))         

print(“課題コード+課題KW=”,cdwd_list[0:3])

print(“最小の課題コード長=”,ncd1)

print(“”)

# 整形(ヒットコードの階層の差に応じ、ヒットコードの前にブランクを挿入)

bcdwd_list = []

for n1,str1 in enumerate(cdwd_list):

    bcdwd = str1.split(“:”)    # 分割

    bcd1 = str(bcdwd[0])

    # print(bcd1)

    if len(bcd1) – ncd1 == 0: wd = “”

    if len(bcd1) – ncd1 == 1: wd = “    ”

    if len(bcd1) – ncd1 == 2: wd = “    ”

    if len(bcd1) – ncd1 == 3: wd = “        ”

    if len(bcd1) – ncd1 == 4: wd = “        ”    

    if len(bcd1) – ncd1 == 5: wd = “            ”

    if len(bcd1) – ncd1 == 6: wd = “            ” 

    if len(bcd1) – ncd1 == 7: wd = “                ”

    if len(bcd1) – ncd1 == 8: wd = “                ” 

    if len(bcd1) – ncd1 == 9: wd = “                    ”

    if len(bcd1) – ncd1 == 10: wd = “                    ” 

    if len(bcd1) – ncd1 == 11: wd = “                        ”

    if len(bcd1) – ncd1 == 12: wd = “                        ”         

    if len(bcd1) – ncd1 == 13: wd = “                            ”

    if len(bcd1) – ncd1 == 14: wd = “                            ”

    if len(bcd1) – ncd1 == 15: wd = “                                ”

    if len(bcd1) – ncd1 == 16: wd = “                                ”

    bstr1 = wd + str(str1)

    # print(bstr1)

    bcdwd_list.append(bstr1)

# print(“抽出課題=”,bcdwd_list[0:3])

# DataFrame化

df1 = pd.DataFrame(data=bcdwd_list, columns=[‘課題コード・課題KW’])

# dataframeをarrayに変換

arr1 = df1.values

# 書き出すbookを指定

wb = openpyxl.load_workbook(file_name)

# シートを追加

ws = wb.create_sheet(title=’課題コード・課題KW1′)

# 保存

wb.save(file_name) 

if len(arr1)>0:

    # 書き出すbookを指定

    wb = openpyxl.load_workbook(file1_name)

    # シートを追加

    sheetname=”課題コード・課題KW1″

    ws=book.create_sheet(title=sheetname) 

    # 保存

    wb.save(folder1+”/”+keywrd+”課題・主要構成.xlsx”)    # keywrd:検索KW

    # 書き出すフォルダを作成

    wb.save(keywrd+”課題・主要構成.xlsx”)

    # Excel(xlsx)に書く出し

    # ヘッダ作成

    header_list=[[“課題コード+検索KW”]]

    file_name=folder1+”/”+keywrd+”課題・主要構成.xlsx”    # keywrd:課題コード

    # file_name=keywrd+”課題・主要構成.xlsx”

    # print(“file_name=”,file_name)

    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[sheetname]

    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(“フォルダ「” + folder1+ “」の” + “「課題・主要構成.xlsx」に課題コード+検索KW1を書き出しました”)

#/

# step6 new課題・主要構成を新たなキーワード検索により更に絞り込む

# 読み込むファイル名を指定

folder1=keywrd+”課題・主要構成”

file1_name = folder1 + “/” + keywrd+”課題・主要構成.xlsx”

# 課題・主要構成読み込み

kmp_data=pd.read_excel(file1_name,sheet_name=”new課題・主要構成KW1″)

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

# print(“kmp_data=”,len(kmp_data))

# リスト化

kmp_list = kmp_data.values    # リスト化

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

# keywrd+課題・主要構成の技術内容読み込み

# 発明の名称読み込み

ti_data2=kmp_data.iloc[:,8]

ti_list2 = ti_data2.values    # リスト化

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

# 要約読み込み

abst_data2=kmp_data.iloc[:,9]

abst_list2 = abst_data2.values    # リスト化

# 利用分野読み込み

bunya_data2=kmp_data.iloc[:,10]

bunya_list2 = bunya_data2.values    # リスト化

# 従来の技術読み込み

jurai_data2=kmp_data.iloc[:,11]

jurai_list2 = jurai_data2.values    # リスト化

# 発明の効果読み込み

kouka_data2=kmp_data.iloc[:,12]

kouka_list2 = kouka_data2.values    # リスト化

# 課題読み込み

kadai_data2=kmp_data.iloc[:,13]

kadai_list2 = kadai_data2.values    # リスト化

# 請求項1読み込み

claim1_data2=kmp_data.iloc[:,14]

claim1_list2 = claim1_data2.values    # リスト化

# 発明の名称から請求項1までを結合

patwrd_list2=[]

for n1, str1 in enumerate(ti_list2):

    patwrd_list2.append(str1+str(abst_list2[n1])+str(bunya_list2[n1])+

                    str(jurai_list2[n1])+str(kouka_list2[n1])+

                    str(kadai_list2[n1])+str(claim1_list2[n1]))

# print(“公報件数=”,len(patwrd_list2))

# 公報件数が設定値2より多い場合には新たなキーワードで検索

if len(kmp_data) > 100:    # 設定値2

   # 絞り込むキーワードを入力

    keywrd3 = input(“更に絞り込むキーワードは(入力例:携帯;モバイル)、”)    # 絞り込むキーワードを入力

    # keywrd3 = “携帯;モバイル”

    # print(“絞り込むキーワード=”,keywrd3) 

    # 新たなキーワードで検索

    srkw = []

    newkmp_list = []

    for n2,str2 in enumerate(patwrd_list2):    # 発明の名称から請求項1までの結合データ

        # str2 = str(str2)

        kwd3 = keywrd3.split(“;”)

        # print(str(kwd2))

        for n3,str3 in enumerate(kwd3):

            # print(str3)    # キーワード

            if str3 in str2:

                # print(n2,str2)

                # print(n2,kmp_list[n2])

                # newkmp_list.append(patwrd_list2[n2])

                newkmp_list.append(kmp_list[n2])

                srkw.append(keywrd3)

                break

    print(“絞り込み後の件数=”,len(newkmp_list))

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

    # フォルダ「(KW)+課題・主要構成」のファイル「課題・主要構成.xlsx」を指定

    file_name=folder1+”/”+keywrd+”課題・主要構成.xlsx”    # keywrd:課題コード   

    # print(file_name)

    # DataFrame化

    df1 = pd.DataFrame(data=newkmp_list)

    df2 = pd.DataFrame(data=srkw, columns=[“追加検索KW2”])

    # 横に結合

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

    # dataframeをarrayに変換

    arr1 = df40.values    # リスト化

    # 書き出すbookを指定

    wb = openpyxl.load_workbook(file_name)

    # シートを追加

    sheetname=”new課題・主要構成KW2″

    ws = wb.create_sheet(title=sheetname)

    # 保存

    wb.save(file_name) 

    # Excel(xlsx)に書き出し

    # ヘッダ作成

    header_list=[[“ファイル名”,”検索KW”,”課題コード”,”課題KW”,”要部構成単語”,”新規要素”,”主要構成”,

                  “公報番号”,”発明の名称”,”要約”,”利用分野”,”従来の技術”,

                  “発明の効果”,”課題”,”請求項1″,”類似度”,”追加検索KW1″,”追加検索KW2″]]

    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[sheetname]

    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(“フォルタ名=”,folder1)

print(“ファイル名= “,keywrd,”課題・主要構成.xlsx”)

print(“”)

print(“フォルダ「” + folder1+ “」内のファイル「keywrd+課題・主要構成.xlsx」のシート「new課題・主要構成2」に課題コード+検索KWを書き出しました”)

#/

# step7 再度、課題・主要構成に含まれている課題コードを抽出

# 読み込むファイル名を指定

folder1=keywrd+”課題・主要構成”

file1_name = folder1 + “/” + keywrd+”課題・主要構成.xlsx”

# 課題・主要構成読み込み

pat_data=pd.read_excel(file1_name,sheet_name=”new課題・主要構成KW2″)

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

print(“課題・主要構成の件数=”,len(pat_data))

# 課題・主要構成の課題コード読み込み

kmcode_data = pat_data.iloc[:,2]    # 課題・主要構成の課題コード

kmcode_list = kmcode_data.values    # リスト化

# print(“課題・主要構成の課題コード[0:3]=”,kmcode_list[0:3])

# リスト化

kmcode_list = []

for str1 in kmcode_data:

    str1 = str(str1)

    str1_list = str1.split(“;”)

    for str2 in str1_list:

        kmcode_list.append(str(str2))

# print(len(kmcode_list))

# 重複を削除 

kmcode_list = list(set(kmcode_list))    # 重複を削除 

# print(len(kmcode_list))

# print(kmcode_list[0:3])

# ソート

kmcode_list = sorted(kmcode_list)

# print(len(kmcode_list))

print(“new課題・主要構成KW2の課題コード=”,kmcode_list[0:3])

# 降順課題コード表の課題コード表読み込み

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

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

# 降順課題コード表の課題コードでソート

kadai_data=kadai_data.sort_values(‘課題コード’)

# print(“課題コード表の課題コード[0:3]=”,kadai_data[0:3])

# 降順課題コード表の課題コード読み込み

code_data=kadai_data.iloc[:,5]

code_list = code_data.values    # リスト化

print(“課題コード[0:3]=”,code_list[0:3])

# 降順課題コード表の課題KW読み込み

kw_data=kadai_data.iloc[:,4]

kw_list = kw_data.values    # リスト化

print(“課題KW[0:3]=”,kw_list[0:3])

print(“”)

# 課題・主要構成の課題コードに降順課題コード表の課題KWを付加

ncd1 = 100

cdwd_list = []

for n1, str1 in enumerate(kmcode_list):   # 課題・主要構成の課題コード

    str1 =str(str1)

    for n2, str2 in enumerate(code_list):   # 

        str2 =str(str2)

        if str1 == str2:

            # print(str1,kw_list[n2])

            cdwd_list.append(str1 + “:” + kw_list[n2])

            if len(str1) < ncd1: ncd1 = len(str1)

            break

print(“抽出課題コード数=”,len(cdwd_list))         

print(“課題コード+課題KW=”,cdwd_list[0:3])

print(“最小の課題コード長=”,ncd1)

print(“”)

# 整形(ヒットコードの階層の差に応じ、ヒットコードの前にブランクを挿入)

bcdwd_list = []

for n1,str1 in enumerate(cdwd_list):

    bcdwd = str1.split(“:”)    # 分割

    bcd1 = str(bcdwd[0])

    # print(bcd1)

    if len(bcd1) – ncd1 == 0: wd = “”

    if len(bcd1) – ncd1 == 1: wd = “    ”

    if len(bcd1) – ncd1 == 2: wd = “    ”

    if len(bcd1) – ncd1 == 3: wd = “        ”

    if len(bcd1) – ncd1 == 4: wd = “        ”    

    if len(bcd1) – ncd1 == 5: wd = “            ”

    if len(bcd1) – ncd1 == 6: wd = “            ” 

    if len(bcd1) – ncd1 == 7: wd = “                ”

    if len(bcd1) – ncd1 == 8: wd = “                ” 

    if len(bcd1) – ncd1 == 9: wd = “                    ”

    if len(bcd1) – ncd1 == 10: wd = “                    ” 

    if len(bcd1) – ncd1 == 11: wd = “                        ”

    if len(bcd1) – ncd1 == 12: wd = “                        ”         

    if len(bcd1) – ncd1 == 13: wd = “                            ”

    if len(bcd1) – ncd1 == 14: wd = “                            ”

    if len(bcd1) – ncd1 == 15: wd = “                                ”

    if len(bcd1) – ncd1 == 16: wd = “                                ”

    bstr1 = wd + str(str1)

    # print(bstr1)

    bcdwd_list.append(bstr1)

# print(“抽出課題=”,bcdwd_list[0:3])

# DataFrame化

df1 = pd.DataFrame(data=bcdwd_list, columns=[‘課題コード・課題KW’])

# dataframeをarrayに変換

arr1 = df1.values

# 書き出すbookを指定

wb = openpyxl.load_workbook(file_name)

# シートを追加

ws = wb.create_sheet(title=’課題コード・課題KW2′)

# 保存

wb.save(file_name) 

if len(arr1)>0:

    # 書き出すbookを指定

    wb = openpyxl.load_workbook(file1_name)

    # シートを追加

    sheetname=”課題コード・課題KW2″

    ws=book.create_sheet(title=sheetname) 

    # 保存

    wb.save(folder1+”/”+keywrd+”課題・主要構成.xlsx”)    # keywrd:検索KW

    # 書き出すフォルダを作成

    wb.save(keywrd+”課題・主要構成.xlsx”)

    # Excel(xlsx)に書く出し

    # ヘッダ作成

    header_list=[[“課題コード+検索KW”]]

    file_name=folder1+”/”+keywrd+”課題・主要構成.xlsx”    # keywrd:課題コード

    # file_name=keywrd+”課題・主要構成.xlsx”

    # print(“file_name=”,file_name)

    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[sheetname]

    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(“フォルダ「” + folder1+ “」の” + “「課題・主要構成.xlsx」に課題コード+検索KW2を書き出しました”)

#/


print(“終了しました”)