JavaPG Ich habe ein PG erstellt, das die in db gespeicherte Protokollnachricht GROPUP und diese mit Mecab morphologisch weiter analysiert und normalisiert.
Tiggercmd.java
import java.io.File;
import java.io.FileInputStream;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
import oracle.jdbc.*;
import net.moraleboost.mecab.Lattice;
import net.moraleboost.mecab.impl.StandardTagger;
import net.moraleboost.mecab.Node;
class Tiggercmd {
static String[] hinsis = {
"type0","type1","type2","type3","style0","style1","calls0","calls1","calls2"
};
public static void main(String[] args) throws Exception { //Tagger erstellen.
if (args.length<1) {
System.err.println(
"USAGE:Tiggercmd readwrite-propfileName(non extents)"
);
return;
}
StandardTagger tagger = new StandardTagger("");
//Versionszeichenfolge abrufen
System.err.println("MeCab version " + tagger.version());
//Build Lattice (ein Objekt, das Laufzeitinformationen speichert, die für die morphologische Analyse erforderlich sind)
Lattice lattice = tagger.createLattice();
//Öffnen Sie die INFO-Eigenschaft
Properties Tiggercmd_props = new Properties();
Tiggercmd_props.load(new FileInputStream(new File(args[0])));
OracleConnection con1 = null;
OracleConnection con2 = null;
PreparedStatement in_sql_prepare = null;
ResultSet in_rls = null;
OraclePreparedStatement con2prpares = null;
int msgid = 0;
int seq =0;
String features[] = null;
try {
//Stellen Sie eine Verbindung zu IN DB her
con1 = connect(Tiggercmd_props.getProperty("conids1.user"), Tiggercmd_props.getProperty("conids1.password"),Tiggercmd_props.getProperty("conids1.TNSPINGString"));
//Stellen Sie eine Verbindung zu WRITE DB her
con2 = connect(Tiggercmd_props.getProperty("conids2.user"), Tiggercmd_props.getProperty("conids2.password"),Tiggercmd_props.getProperty("conids2.TNSPINGString"));
//Führen Sie readQuery aus
in_sql_prepare = con1.prepareStatement(Tiggercmd_props.getProperty("in.sqls"));
in_rls = in_sql_prepare.executeQuery();
System.err.println("READSQL:"+in_sql_prepare.toString());
while (in_rls.next() ){
//Legen Sie die zu analysierende Zeichenfolge fest
String in_surface = in_rls.getString(Tiggercmd_props.getProperty("in.surface_colname"));//String text = "Es ist ein sonniger Tag.";
System.out.println(msgid+":\t"+in_surface);
lattice.setSentence(in_surface);
tagger.parse(lattice);
//Ergebnis der morphologischen Analyse
System.out.println(lattice.toString());
//Form und Identität der Ausgabeoberfläche, während die Morphologie einzeln verfolgt wird
Node node = lattice.bosNode();
while (node != null) {
String addssql = Tiggercmd_props.getProperty("wr.sqls");
//Legen Sie fest, dass Variablen mit OraclePreparedStatement analysiert werden sollen
con2prpares = (OraclePreparedStatement)con2.prepareStatement(addssql);
con2prpares.setIntAtName("msgid",msgid);
con2prpares.setStringAtName("msg",in_surface);
con2prpares.setIntAtName("seq",seq);
con2prpares.setStringAtName("surface",node.surface());
con2prpares.setStringAtName("feature",node.feature());
features = node.feature().split(",");
for (int i=0;i<hinsis.length;i++){
con2prpares.setStringAtName(hinsis[i],(i<features.length)?features[i]:null);
}
//Aktualisieren und aktualisieren Sie die Zählausgabe
System.err.println("inserts:\t"+con2prpares.executeUpdate());
con2prpares.close();con2prpares=null;
node = node.next();
seq++;
}
con2.commit();
seq = 0;
lattice.clear();
msgid ++;
}
in_rls.close();in_rls=null;
in_sql_prepare.close();in_sql_prepare=null;
con1.close();con1=null;
con2.close();con2=null;
}catch (Exception oe){
oe.printStackTrace(System.err);
}finally {
try {
if (in_rls!=null) in_rls.close();
if (in_sql_prepare!=null) in_sql_prepare.close();
if (con1 != null) con1.close();
if (con2prpares!=null) con2prpares.close();
if (con2 != null) con2.close();
}catch (Exception fe){}
}
// lattice,Tagger zerstören
lattice.destroy();
tagger.destroy();
}
/**
* Utility method: creates a new JDBC connection to the database.
*/
static OracleConnection connect(String user,String password,String tnspingString) throws Exception {
OracleConnection conn = null;
OracleDriver dr = new OracleDriver();
Properties prop = new Properties();
prop.setProperty("user",user);
prop.setProperty("password",password);
conn = (OracleConnection)dr.connect("jdbc:oracle:thin:@"+tnspingString,prop);
conn.setAutoCommit(false);
return conn;
}
}
properties
domainlogconrwinfo.properties
#INFO
#Informationen zur Zielverbindung abfragen
conids1.user=hoge
conids1.password=hoge
conids1.TNSPINGString=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.XXX)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = servicename1)))
#↑ Die vollständigen Verbindungsinformationen, die mit dem Verbindungsnamen tnspings ausgegeben werden, werden beschrieben.
#INSERT-Zielverbindungsinformationen
conids2.user=hoge
conids2.password=hoge
conids2.TNSPINGString=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.***)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = servicenamea)))
#↑ Die vollständigen Verbindungsinformationen, die mit dem Verbindungsnamen tnspings ausgegeben werden, werden beschrieben.
in.sqls= \
select a.MESSAGETEXT,count(a.TIMEPARTS) from domainlog a \
where 1=1 \
group by a.MESSAGETEXT \
order by a.MESSAGETEXT
#↑ SQL, um die Liste der Nachrichten abzurufen, die Sie analysieren möchten
in.surface_colname=MESSAGETEXT
#↑ Spaltenname, der der Nachricht in diesem SQL zugewiesen ist
#↓ SQL einfügen
wr.sqls= \
insert into domainlog_rexs (msgid,MESSAGETEXT,seq,surface,manals \
,type0,type1,type2,type3,style0,style1,calls0,calls1,calls2 ) \
values(:msgid,:msg,:seq,:surface,:feature, \
:type0,:type1,:type2,:type3,:style0,:style1,:calls0,:calls1,:calls2 \
)
#↑ Wenn die folgenden Variablen für morphologische Analysedaten gemäß der Spalte in VALUES beschrieben werden, werden dort die folgenden Variablen festgelegt.
#:Seriennummer der Nachricht msgid parse
#:msg Analyse-Nachrichtenzeichenfolge
#:seq Analyseformular Seriennummer des Elements
#:Oberfläche Analyseformular Element Oberflächenschicht Zeichenkette
#:feature Element (Teil des Wortes?) Zeichenfolge der Systemanalyseergebnisse
#:type0 IPA Type1
#:type1 IPA Type2
#:type2 IPA Type3
#:type3 IPA Type4
#:style0 Typ 1
#:style1 Typ 2
#:Anrufe0 Lesen 1
#:Anrufe1 Lesen 2
#:Anrufe2 Lesen 3
#Referenzlink https://qiita.com/priancho/items/f633a9e99616b3fe451f
Verwenden Sie LISTAGG (Zeichensummenkatalogfunktion) für die Zeichenzusammenfassung
python
--MSGID,Listen Sie die kombinierten CALLS1 in den Analyseergebnissen für jeden MSGTEXT auf
select a.MESSAGETEXT,a.MSGID,a.CONCATHINSIWORD,a.ITEMS from (
select a.MSGID,a.MESSAGETEXT,b.ITEMS
,listagg(a.CALLS1,';') within group (order by a.MSGID,a.SEQ) as concatHINSIWORD
from domainlog_rexs a
,(select a.MSGID,listagg(a.SURFACE,';') within group (order by a.SEQ) as items
from domainlog_rexs a
where 1=1
and a.SURFACE is not null
and a.TYPE0='Substantiv'
and a.TYPE1 in (
'Allgemeines'
,'Nummer'
,'Verbindung ändern'
)
group by a.MSGID) b
where 1=1
and ( a.CALLS0 <> '*' and a.TYPE0 is not null)
and a.MSGID=b.MSGID
group by a.MSGID,a.MESSAGETEXT,b.ITEMS
) a
order by a.MSGID
Ergebnis: Die Protokollnachricht mit 10.000 Strichen wurde durch Gruppieren einfacher Nachrichten auf Tausende reduziert. Darüber hinaus wurde die Anzahl der Putter durch Gruppierung der morphologischen Analyseergebnisse in Formulierungen auf weniger als 100 reduziert. Wie viele Themen widmen sich daher den Menschen?
Besorgnis, Sorge: Nützliche Weisheit dieser Forscher (in diesem Beispiel die morphologische Analyse-Engine Mecab) Es ist praktisch und praktisch, ohne von der Mode mitgerissen zu werden Gibt es japanische Anbieter oder berühmte Software- / Hardwareentwicklungs- / Fertigungs- / Vertriebsunternehmen? Liegt es daran, dass die Änderung der bestehenden Gewinnstruktur für uns das gefährlichste Verhalten ist? Was wird bei den Olympischen Spielen in Tokio passieren, wenn dies nicht gebrochen werden kann? Ich mache mir als japanischer Ingenieur Sorgen.
Recommended Posts