JavaPG J'ai fait un PG qui GROPUP le message de journal stocké dans db et l'analyser morphologiquement avec Mecab et le normaliser.
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 { //Construisez Tagger.
if (args.length<1) {
System.err.println(
"USAGE:Tiggercmd readwrite-propfileName(non extents)"
);
return;
}
StandardTagger tagger = new StandardTagger("");
//Obtenir la chaîne de version
System.err.println("MeCab version " + tagger.version());
//Build Lattice (un objet qui stocke les informations d'exécution requises pour l'analyse morphologique)
Lattice lattice = tagger.createLattice();
//Ouvrir la propriété INFO
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 {
//Connectez-vous à IN DB
con1 = connect(Tiggercmd_props.getProperty("conids1.user"), Tiggercmd_props.getProperty("conids1.password"),Tiggercmd_props.getProperty("conids1.TNSPINGString"));
//Connectez-vous à WRITE DB
con2 = connect(Tiggercmd_props.getProperty("conids2.user"), Tiggercmd_props.getProperty("conids2.password"),Tiggercmd_props.getProperty("conids2.TNSPINGString"));
//Exécuter readQuery
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() ){
//Définir la chaîne de caractères à analyser
String in_surface = in_rls.getString(Tiggercmd_props.getProperty("in.surface_colname"));//String text = "C'est une journée ensoleillée.";
System.out.println(msgid+":\t"+in_surface);
lattice.setSentence(in_surface);
tagger.parse(lattice);
//Résultat de l'analyse morphologique de sortie
System.out.println(lattice.toString());
//Sortie de la forme et de l'identité de la surface tout en traçant la morphologie une par une
Node node = lattice.bosNode();
while (node != null) {
String addssql = Tiggercmd_props.getProperty("wr.sqls");
//Défini pour analyser les variables avec OraclePreparedStatement
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);
}
//Mettre à jour et mettre à jour la sortie du nombre
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,Détruire le tagueur
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
#Interroger les informations de connexion à la cible
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)))
#↑ La sortie complète des informations de connexion avec le nom de connexion tnspings est décrite.
#INSÉRER les informations de connexion cible
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)))
#↑ La sortie complète des informations de connexion avec le nom de connexion tnspings est décrite.
in.sqls= \
select a.MESSAGETEXT,count(a.TIMEPARTS) from domainlog a \
where 1=1 \
group by a.MESSAGETEXT \
order by a.MESSAGETEXT
#↑ SQL pour obtenir la liste des messages que vous souhaitez analyser
in.surface_colname=MESSAGETEXT
#↑ Nom de colonne attribué au message dans ce SQL
#↓ INSÉRER SQL
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 \
)
#↑ Si les variables de données d'analyse morphologique suivantes sont décrites dans VALEURS selon la colonne, les variables suivantes y seront définies.
#:msgid parse message numéro de série
#:msg Chaîne de message d'analyse
#:seq Formulaire d'analyse Numéro de série de l'élément
#:Forme d'analyse de surface Chaîne de caractères de couche de surface d'élément
#:caractéristique Élément (partie du mot?) Chaîne de caractères du résultat de l'analyse du système
#:type0 IPA Type1
#:type1 IPA Type2
#:type2 IPA Type3
#:type3 IPA Type4
#:style0 type 1
#:style1 type 2
#:appels0 lecture 1
#:appels1 lecture 2
#:appels2 lecture 3
#Lien de référence https://qiita.com/priancho/items/f633a9e99616b3fe451f
Utilisez LISTAGG (fonction de catalogue SOMME de caractères) pour le résumé des caractères
python
--MSGID,Listez les CALLS1 combinés dans les résultats d'analyse pour chaque MSGTEXT
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='nom'
and a.TYPE1 in (
'Général'
,'nombre'
,'Changer de connexion'
)
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
résultat: Le message du journal de 10 000 coups a été réduit à des milliers en regroupant des messages simples. De plus, le nombre de putters a été réduit à moins de 100 en regroupant les résultats de cette analyse morphologique en termes. En conséquence, quel est le nombre de sujets auxquels les gens prêtent attention?
Préoccupation: Sagesse utile créée par ces chercheurs (dans cet exemple, le moteur d'analyse morphologique Mecab) Il est repris et pratique sans être emporté par la mode Existe-t-il des fournisseurs japonais ou des sociétés renommées de développement logiciel / matériel / fabrication / vente? Est-ce parce que changer la structure de profit existante est le comportement le plus dangereux pour nous? Qu'arrivera-t-il aux Jeux olympiques de Tokyo si cela ne peut être rompu? Je suis inquiet en tant qu'ingénieur japonais.