Есть ли какие-либо предложения или какая-либо помощь, по которой я могу пойти, чтобы вы могли посоветовать мне сделать сегментацию простого текста в текстовом файле во время его преобразования в файл xml, например, как это было раньше в xml. Я имею в виду, что я конвертирую текстовый файл в xml с помощью jaxp+sax, например этот текст:
Hello world. I am happy to see you today.
в этот xml:
<trans-unit id="1">
<target> Hello world</target>
</trans-unit>
<trans-unit id="2">
<target> I am happy to see you today</target>
</trans-unit>
но если у меня, например, есть исходный XML-контент, который в id="1" имеет, например, 3 предложения:
<trans-unit id="1">
<source> Hello world. Sunny smile. Wake up early.</source>
</trans-unit>
<trans-unit id="2">
<source> I am happy to see you today</source>
</trans-unit>
и если я разберу текст из этого xml, я стану простым текстом:
Hello world. Sunny smile. Wake up early.I am happy to see you today.
Как я могу сегментировать этот текст во время его преобразования в xml, чтобы целевой файл xml снова мог иметь 3 предложения? нравится:
<trans-unit id="1">
<target> Hello world. Sunny smile. Wake up early.</target>
</trans-unit>
<trans-unit id="2">
<target> I am happy to see you today</target>
</trans-unit>
то есть преобразование txt->xml:
public void doit() {
try {
in = new BufferedReader(new InputStreamReader(
new FileInputStream(file), "UTF8"));
out = new StreamResult(selectedDir);
initXML();
String str;
while ((str = in.readLine()) != null) {
elements = str.split("\n|((?<!\\d)\\.(?!\\d))");
for (i = 0; i < elements.length; i++)
process(str);
}
in.close();
closeXML();
} catch (Exception e) {
e.printStackTrace();
}
}
public void initXML() throws ParserConfigurationException,SAXException, UnsupportedEncodingException, FileNotFoundException, TransformerException {
// JAXP + SAX
SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
th = tf.newTransformerHandler();
Transformer serializer = th.getTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// XML ausgabe
serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
th.setResult(out);
th.startDocument();
atts = new AttributesImpl();
atts1 = new AttributesImpl();
atts1.addAttribute("", "", "xlmns","CDATA", "urn:oasis:names:tc:xliff:document:1.2");
th.startElement("", "", "xliff", atts1);
th.startElement("", "", "file",null);
th.startElement("", "", "body", null);
}
public void process(String s) throws SAXException {
try {
atts.clear();
k++;
atts.addAttribute("", "", "id", "", "" + k);
th.startElement("", "", "trans-unit", atts);
th.startElement("", "", "target", null);
th.characters(elements[i].toCharArray(), 0, elements[i].length());
th.endElement("", "", "target");
th.endElement("", "", "trans-unit");
}
catch (Exception e) {
System.out.print("Out of bounds!");
}
}
public void closeXML() throws SAXException {
th.endElement("", "", "body");
th.endElement("", "", "file");
th.endElement("", "", "xliff");
th.endDocument();
}