[JAVA] Je souhaite analyser morphologiquement le journal stocké dans la base de données et le stocker dans la base de données pour classer les messages 1

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

Ensuite, pour la normalisation, le même libellé est affiché dans une liste utilisant la lecture 1 et la nomenclature est affichée en tant que partie.

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

Afficher un exemple de résultat

mecab.png

Résultats de la normalisation et préoccupations concernant la communauté des ingénieurs logiciels japonais

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.

c'est tout

Recommended Posts

Je souhaite analyser morphologiquement le journal stocké dans la base de données et le stocker dans la base de données pour classer les messages 1
Je veux intégrer n'importe quel TraceId dans le journal
Est-il possible de mettre la bibliothèque (aar) dans la bibliothèque Android (aar) et de l'utiliser?
Je veux obtenir la valeur en Ruby
Je souhaite simplifier la sortie du journal sur Android
Je veux amener Tomcat sur le serveur et démarrer l'application
Je souhaite modifier le paramètre de sortie du journal de UtilLoggingJdbcLogger
Je veux appeler une méthode et compter le nombre
Je veux mettre le JDK sur mon PC Mac
Je souhaite passer au même écran dans l'état enregistré
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
En Java, je souhaite couper plusieurs caractères spécifiés uniquement du début et de la fin.
Après avoir publié un article avec Rails Simple Calendar, je souhaite le refléter dans le calendrier.
Je souhaite accorder des autorisations de modification et de suppression uniquement à l'affiche
Je veux revenir à l'écran précédent avec kotlin et java!
Je veux supprimer la marge supérieure dans UITableView de Grouped (swift)
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je veux changer la valeur de l'attribut dans Selenium of Ruby
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
Je souhaite importer les éléments du menu déroulant lors de la soumission d'un formulaire dans Rails en CSV et les afficher à partir des données de la base de données.
Je souhaite télécharger un fichier sur Internet en utilisant Ruby et l'enregistrer localement (avec prudence)
Je veux écrire une JSP dans Emacs plus facilement que la valeur par défaut.
J'ai résumé les points à noter lors de l'utilisation combinée des ressources et des ressources
Ajoutez une bibliothèque jar pré-construite à Android et appelez-la dans le cadre
[Administrateur actif] Je souhaite personnaliser le traitement de création et de mise à jour par défaut
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
Je veux passer l'argument d'Annotation et l'argument de la méthode d'appel à aspect
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
J'ai en fait exprimé le problème de la sœur aînée dans le code et l'ai calculé
Je souhaite éliminer les messages d'erreur en double
Je veux utiliser @Autowired dans Servlet
J'ai reçu les données du voyage (application agenda) en Java et j'ai essayé de les visualiser # 001
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
Je souhaite envoyer un e-mail en Java.
J'ai essayé d'organiser la session en Rails
Je veux var_dump le contenu de l'intention
Je souhaite transmettre APP_HOME pour me connecter à Gradle
rsync4j --Je veux toucher rsync en Java.
Je veux être finalement même à kotlin
Je veux que vous racontiez que l'erreur a été résolue lorsque vous avez poignardé le chargeur dans le coin de la tête
Je veux tronquer après la virgule décimale
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
Je veux voir uniquement les dernières car le journal Docker est devenu trop volumineux
J'ai essayé d'appeler une vidéo YouTube de DB avec haml et de l'afficher intégrée
[Active Admin] Je souhaite spécifier l'étendue de la collection à afficher dans select_box
[Android Studio] Je souhaite définir des restrictions sur les valeurs enregistrées dans EditText [Java]
Je veux placer RadioButtons dans le même RadioGroup à n'importe quelle position de l'écran
Je veux ESLint dans le projet Maven. Je veux exécuter Node.js sans le mettre dans mon environnement.
Je souhaite utiliser PowerMock dans une classe qui combine des tests paramétrés et des tests ordinaires
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
# 1_JAVA Je veux obtenir le numéro d'index en spécifiant un caractère dans la chaîne de caractères
Je ne comprenais pas le tri topologique, alors je l'ai recherché et mis en œuvre dans BFS, puis j'ai essayé de résoudre le problème d'AtCoder.