/*******************************************************************************
* Copyright 2016
* Ubiquitous Knowledge Processing (UKP) Lab
* Technische Universität Darmstadt
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package de.tudarmstadt.ukp.lmf.transform.sensealignments;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Set;
import de.tudarmstadt.ukp.lmf.model.core.Sense;
import de.tudarmstadt.ukp.lmf.transform.alignments.SenseAlignment;
import de.tudarmstadt.ukp.lmf.transform.omegawiki.OmegaWikiLMFMap;
import de.tudarmstadt.ukp.omegawiki.api.OmegaWiki;
import de.tudarmstadt.ukp.omegawiki.api.SynTrans;
public class OmegaWikiCrossLingualAlignment extends SenseAlignment
{
public StringBuilder logString;
private final OmegaWiki ow;
private final int sourceLang;
private final int targetLang;
private final String sourceLangId;
private final String targetLangId;
private java.sql.Connection connection;
public OmegaWikiCrossLingualAlignment(String sourceUrl, String destUrl, String dbDriver,
String dbVendor, String user, String pass, OmegaWiki ow, int sourceLang, int targetLang) throws ClassNotFoundException, SQLException, FileNotFoundException
{
super(sourceUrl,destUrl,dbDriver,dbVendor, user, pass,UBY_HOME);
this.ow = ow;
this.sourceLang = sourceLang;
this.targetLang = targetLang;
this.sourceLangId = OmegaWikiLMFMap.mapLanguage(sourceLang);
this.targetLangId = OmegaWikiLMFMap.mapLanguage(targetLang);
logString = new StringBuilder();
Class.forName(dbDriver);
connection = DriverManager.getConnection("jdbc:"+dbVendor+"://"+sourceUrl,user,pass);
}
public void getAlignmentDirectSQL(){
System.out.println("Starting getting alignment for OmegaWiki "
+ getAlignmentFileLocation());
int count = 0;
try {
FileOutputStream outStream = new FileOutputStream(getAlignmentFile());;
PrintStream p = new PrintStream(outStream);
java.sql.Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("SELECT * FROM (SELECT Sense.senseId AS sense1, mr1.synsetId AS synset1, externalReference FROM MonolingualExternalRef AS mr1 JOIN Sense ON Sense.synsetId = mr1.synsetId WHERE mr1.synsetId LIKE 'OW_en%' AND mr1.senseId IS NULL) AS X JOIN (SELECT Sense.senseId AS sense2, mr1.synsetId AS synset2, externalReference FROM MonolingualExternalRef AS mr1 JOIN Sense ON Sense.synsetId = mr1.synsetId WHERE mr1.synsetId LIKE 'OW_de%' AND mr1.senseId IS NULL) AS Y ON X.externalReference = Y.externalReference");
while (rs.next()){
p.println("insert into SenseAxis(senseAxisId,senseAxisType,senseOneId,senseTwoId,synsetOneId,synsetTwoId,lexicalResourceID) VALUES (" +
"'"+"OW_de_en_alignment_"+count+++"'"+","+
"'"+"crosslingualSenseAlignment" +"'"+","+
"'"+rs.getString("sense1")+"'"+","+
"'"+rs.getString("sense2")+"'"+","+
"'"+rs.getString("synset1")+"'"+","+
"'"+rs.getString("synset2")+"'"+","+
"NULL"+")");
}
p.close();
}catch (SQLException e) {
e.printStackTrace();
}catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("Number of alignment:" + count);
}
@Override
public void getAlignment()
{
System.out.println("Starting getting alignment for OmegaWiki ");
try {
int count = 0;
Map <SynTrans,Set<SynTrans>> stm = ow.getInterlanguageSTLinks(sourceLang, targetLang);
System.out.println("Number of STlinks:" + stm.size());
System.out.println("source language: " + sourceLangId + " target language: " + targetLangId);
for(SynTrans source : stm.keySet()) {
// List<Sense> first = ubySource.getSensesByOWSynTransId(""+source.getSyntransid());
// old external system value: "OW SynTrans ID"
// new external system value, e.g. for English: "OmegaWiki_eng_synTrans"
List<Sense> first = ubySource.getSensesByOriginalReference("OmegaWiki_"+sourceLangId+"_synTrans", ""+source.getSyntransid());
if (first.size()>0) {
Sense sourceSense = first.get(0);
System.out.print("First:" + sourceSense.getId());
for (SynTrans target : stm.get(source)){
List<Sense> second = ubyDest.getSensesByOriginalReference("OmegaWiki_"+targetLangId+"_synTrans", ""+target.getSyntransid());
if (second.size() > 0) {
Sense targetSense = second.get(0);
System.out.print("Second:" + targetSense.getId());
System.out.println(count);
addSourceSense(sourceSense);
addDestSense(targetSense);
count++;
}
}
}
}
System.out.println("Number of alignment:" + count);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}