Java: Как экстрагировать разделенный текст из вложенного в HTML?
-
21-12-2019 - |
Вопрос
Например:
<div>
this is first
<div>
second
</div>
</div>
.
Я работаю над обработкой натуральной языку, и я должен перевести веб-сайт (не с помощью Google Translate), для которого я должен извлечь оба предложения «Это сначала» и «вторым» отдельно, чтобы я мог заменить их другимЯзыковый текст в соответствующих делях.Если я избудую текст для сначала, он покажет «Это первый второй», и если я использую рекурсию, чтобы раскопать глубже, он будет извлекать только «вторым»
Помогите мне пожалуйста!
Редактировать
Использование метода SOTETTEXT () создаст задачу в следующем HTML-код:
<div style="top:+0.2em; font-size:95%;">
the
<a href="/wiki/Free_content" title="Free content">
free
</a>
<a href="/wiki/Encyclopedia" title="Encyclopedia">
encyclopedia
</a>
that
<a href="/wiki/Wikipedia:Introduction" title="Wikipedia:Introduction">
anyone can edit
</a>
.
</div>
.
То, что.
Бесплатно
Энциклопедия
Любой может редактировать
Но это должно быть:
что
.
Энциклопедия
Любой может редактировать
Решение
Если я избудую текст сначала, он покажет "Это первый второй"
Используйте ownText()
вместо text()
, и вы получите только элемент, содержащий напрямую.
<Сильные> Вот пример:
final String html = "<div>\n"
+ " this is first\n"
+ " <div>\n"
+ " second\n"
+ " </div>\n"
+ "</div>";
Document doc = Jsoup.parse(html); // Get your Document from somewhere
Element first = doc.select("div").first(); // Select 1st element - take the first found
String firstText = first.ownText(); // Get own text
Element second = doc.select("div > div").first(); // Same as above, but with 2nd div
String secondText = second.ownText();
System.out.println("1st: " + firstText);
System.out.println("2nd: " + secondText);
. Другие советы
Вы можете использовать анализатор XML, на любой язык, который вы используете.Вот для Java: http://www.mkyong.com/java/how-to-yread-xml-file-in-java-dom-parser/
Похоже, вы используете TextContent в Div's, чтобы извлечь контент, который приведет вас к содержимому этого элемента и все элементы посяжению. (Java: Это будет метод getTextContent на элементе)
Вместо этого осматривают детские средства (Java: метод getChildnodes на элементе). У узлов есть свойство «NodeType» (Java: getnoDetype), на котором вы можете посмотреть на работу, является ли узел текстовым узлом (Java: Node.text_node) или элемент (Java: Node.Element_node). Итак, чтобы привести пример, у вас есть дерево узлов, которое похоже на это ...
div (Element)
this is first (TextNode)
div (Element)
second (TextNode)
.
Внешний div напрямую содержит только два узла - первый текст, а внутренний div. То, что внутренний Div затем содержит текст «второй».
Так же петля по узлам во внешнем Div, если узел является текстовым узлом, переведением, в противном случае возникают в элемент. Обратите внимание, что есть другие виды узлов, комментариев и тому подобного, но для ваших целей, которые вы, вероятно, можете игнорировать их.
Предполагая, что вы используете W3C DOM API http://docs.orcle.com/javase /7/docs/api/org/w3c/dom/node.html
Elements divs=doc.getElementsByTag("div");
for (Element element : divs) {
System.out.println(element.text());
}
.
Это должно работать, если вы используете jsououp html Parser.