[PYTHON] Erstellen Sie eine Patentkarte mit Streamlit

Einführung

Erklärung ↓

(Version 1) Machine-learned vector embedding based on document contents and metadata, where two documents that have similar technical content have a high dot product score of their embedding vectors.

__ Abgeschlossen __

Hinweis: Wenn Sie es die ganze Zeit verschieben, kostet es GCP, sodass es ohne Vorankündigung stoppt. Es wird auch kein Lastausgleich durchgeführt, daher kann die Ausgabe einige Zeit dauern. </ font>

image.png'

1 Erstellen Sie Ipynb-Dateien usw. mit Notebooks von AI Platform

Erstellen Sie zunächst eine Python-Anwendungsseite mit AI Notebook auf GCP. Eine .ipynb-Datei und zwei .py-Dateien wie unten gezeigt.

image.png

2 Portöffnung usw.

Um es im Web verfügbar zu machen Nachdem Sie mit dem Streamlit-Lernprogramm fortgefahren sind, gehen Sie zu Streamlit remote ausführen. Öffnen Sie während des Verweises den Port der externen IP-Adresse von GCE, auf der AI Notebook ausgeführt wird.

VPC-Netzwerk ⇒ Firewall, Geben Sie in TCP port = 8501 an (geben Sie streamlit an). SourdeIPRange-Bezeichnung 0.0.0.0/0 (von allen akzeptiert und bereitgestellt)

  • Aus Sicherheitsgründen ist es besser, die freizugebenden Adressen einzugrenzen. Wird überprüft

2 Inhalt von Streamlit

Es gibt 3 Dateien.

  • Das erste ist, einfach streamlit zu installieren und auszuführen
!streamlit run claimgen.py
  • Zweitens: So etwas wie die Front
plot.py
import streamlit as st
import pandas as pd
import plotly.graph_objects as go

#Dritte erstellte Py-Datei
import um

def drawfig(dataframe,cc):
    x = dataframe['xpos'].values
    y = dataframe['ypos'].values

   
    fig = go.Figure(go.Histogram2dContour(
        x = x,
        y = y,
        #xbins={'end':200, 'size':1, 'start': 0},
        zmin = 0,
        #zmax = 500,
        #ncontours=50,
        colorscale = 'Jet',
        contours = dict(
            showlabels = True,
            labelfont = dict(
                family = 'Raleway',
                color = 'white'
            )
        ),
        hoverlabel = dict(
            bgcolor = 'white',
            bordercolor = 'black',
            font = dict(
                family = 'Raleway',
                color = 'black'
            )
        ),
        

    ))
 
    
    fig.add_scattergl(x=dataframe["xpos"],
                y=dataframe["ypos"],
                mode="markers",
                marker=dict(size=3.5, color="blue"),
                text= "<a href='" + dataframe["url"]+ "' style='color: rgb(255,255,255)'>" + dataframe["index"] + "<br>" +dataframe["applicant"].str[0:15]+"…<br>"+dataframe["title"].str[0:15]+"…</a>",
                name="Das ganze"
                )
    
    #x_disp_range =[-8,10]
    #y_disp_range =[-7,7]

     

    #fig.update_xaxes(range=x_disp_range)
    #fig.update_yaxes(range=y_disp_range)

    fig.update_layout(
        #title=dataframe['appday'].iloc[0],
        height = 800,
        width = 800,
        bargap = 0,
        hovermode = 'closest',
        showlegend = False
    )



    fig.write_html(cc+"_heatmap.html")
    #f2 = go.FigureWidget(fig)
    #fig.show()
    return fig




st.title('Patentdokument 2D-Karte')
st.markdown('IPC und Schlüsselwörter auf dieser Site@Die im Titel angegebene Population wurde berechnet[embedding](https://console.cloud.google.com/marketplace/product/google_patents_public_datasets/google-patents-research-data?filter=solution-type:dataset)EswirdalszweidimensionaleKartemitUMAPdbasierendaufangezeigt.DieEinbettungsdatenderfürdasDiagrammverwendetenPatentdatensind[Dies](https://console.cloud.google.com/marketplace/product/google_patents_public_datasets/google-patents-research-data)')


if st.button('Geben Sie die Suchbedingungen an'):
    text = st.text_input('Suchworteingabe', 'Gerät')
    ipc = st.selectbox(
         'IPC-Auswahl',
         (
     'G06F','A61K','H01L','G01N','H04L','A61B','H04N','C07D','H04W','C12N','G02B','B01D','B65D','H01M','G06Q','B29C','G01R','H04B','A61M','C07C','A61F','H01R','C08L','B01J','B41J','B65G','G11B','H05K','G06K','C02F','G02F','E21B','B23K','H02J','B32B','H02K','B60R','A23L','G03G','C07K','H04M','H05B','C04B','G01B','C08G','A01G','F16H','A01N','C08F','G06T','H01H','F24F','B62D','A01K','C12Q','F16L','A63F','C23C','F16K','B65H','G05B','A47J','E04B','G09G','H01J','B21D','C09D','G11C','F21S','C09K','B65B','A61L','C01B','H02M','G01M','C22C','H04R','G01S','G03B','A63B','C08J','H01F','B23Q','E02D','B60K','H01Q','G01C','B24B','H01B','F16D','E06B','G03F','F04D','A47L','A47B','F21V','F02M','A61N','H02G','F16C','F04B','G09B','G08B','B08B','G09F','F02D','E04H','A47G','B22D','D06F','F16B','B01F','E05B','H03K','A47C','B66B','F25B','E04F','B25J','F25D','G01F','B23B','B05B','B02C','F01N','B25B','E04G','C12P','B23P','H02P','G05D','B60N','H04J','C09J','B60T','B60C','A61H','G10L','G01L','B66C','G01D','F01D','G01V','H01S','G08G','C11D','A61G','A61C','F16F','H03M','C08K','F02B','A01D','H02B','B63B','H02H','F26B','A47K','C12M','B41F','B60W','C07F','B05D','B60L','A41D','C03C','F24C','H01G','F15B','C03B','G01J','F03D','A01H','C10G','F24H','B64C','E02F','B21B','C21D','G07F','B26D','A01C','F04C','B22F','E02B','E21D','A43B','A45D','C22B','C07H','E01C','H04Q','B60J','C25D','B28B','A61J','B41M','B05C','A23K','F16J'
         ))
    cc = st.selectbox(
         'Länderauswahl',
         ('JP', 'MX', 'US','AU','EP','CN'))



df = um.get_xypos_df(ipc,text,cc)
plotly_fig = drawfig(df.reset_index(),cc)

st.write(plotly_fig) 
st.write(get_apprank(df))
st.write("Daten")
st.write(df)





  • Der dritte bezieht sich auf Bigquery und Umap Ist SQL Injection in Ordnung (Pochen)?
um.py
import umap
import pandas as pd
from google.cloud import bigquery


#Bigquery Teil
def get_df(s_ipc,s_text,cc):
    client = bigquery.Client()
    sql = """
        WITH gpat AS (
            SELECT 
            publication_number as pubnum,
            top_terms,
            url,
            embedding_v1 as emb
            FROM patents-public-data.google_patents_research.publications
        ),

        pat AS (
           SELECT publication_number as pubnum,
           filing_date as appday,
           STRING_AGG(DISTINCT title.text) as title,
           #STRING_AGG(DISTINCT abstract.text) as abst,
           STRING_AGG(DISTINCT appls.name,'|') as applicants
           FROM `patents-public-data.patents.publications`,UNNEST(title_localized) as title,UNNEST(assignee_harmonized) as appls,UNNEST(ipc) as ipcs
           WHERE SUBSTR(publication_number,0,2) = @cc 
           AND title.text LIKE @s_text
           AND ipcs.code LIKE @s_ipc          
           #AND filing_date > 20000101
           GROUP BY pubnum,filing_date
        )

       SELECT gpat.pubnum,
              gpat.url,
              gpat.top_terms,
              pat.title,
              #pat.abst,
              pat.applicants,
              pat.appday,
              gpat.emb
       FROM gpat
       INNER JOIN pat
       ON gpat.pubnum = pat.pubnum
       LIMIT 1000
    """
~~Weggelassen, weil es lang ist

3 Eine kleine Analyse

Erstellen mit Dieses Thema: Sonos v.s. google.

4. Schwierigkeiten

  • Der Teil, der das Ausführungsergebnis von Bigquery in Pandas erhält. Normalerweise im Netz
# Download query results.
query_string = """
~~
"""

dataframe = (
    bqclient.query(query_string)
    .result()
    .to_dataframe(bqstorage_client=bqstorageclient)
)

Es heißt, dass dies mit to_dataframe () möglich ist, aber ein Fehler tritt auf und es heilt nicht. Es kann nicht geholfen werden, also nahm ich die Tupelreihen heraus, die mit Tupeln zurückkamen. Ich habe es in Pandas gelegt. Ich möchte einen anderen guten Weg finden.

  • Streamlit kann nur vertikal hinzugefügt werden. Es schien, als könnte der Bildschirm geteilt werden, aber mit der Standard-API konnte dies nicht erreicht werden. Ich muss hier etwas mehr lernen. ⇒ Wenn Sie nur die Seitenleiste einfügen möchten, sollten Sie das Element, das Sie in die Seitenleiste einfügen möchten, als st.sidebae festlegen. ~!

Recommended Posts