Java : HTML에서 중첩 된 에서 분리 된 텍스트를 어떻게 추출합니까?
-
21-12-2019 - |
문제
예 :
<div>
this is first
<div>
second
</div>
</div>
.
나는 자연 언어 가공을 위해 일하고 있습니다. 나는 웹 사이트를 번역해야합니다 (Google 번역을 사용하지 않아)은 "첫 번째"와 "두 번째"는 별도로 대체 할 수 있습니다.각 DIV의 언어 텍스트.처음에는 텍스트를 추출하면 "이는 처음 두 번째"표시됩니다. 재귀를 사용하여 더 깊이 파고를 사용하면 "두 번째"
저를 도와주세요!
편집
offytext () 메소드를 사용하면 다음 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>
.
인쇄 :
that.
무료
백과 사전
누구나 편집 할 수 있습니다
그러나 그것은해야합니다 :
그
.
백과 사전
누구나 편집 할 수 있습니다
해결책
첫 번째 텍스트를 추출하면 "이것은 처음 두 번째"
이 표시됩니다.
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-read-xml-file-in-java-dom-parser/
DIV의 TextContent를 사용하여 콘텐츠를 추출하는 것처럼 보입니다.이 요소의 내용과 모든 하위 요소를 얻을 수 있습니다. (Java : 이것은 요소의 getTextContent 메소드가 될 것입니다)
대신 ChildNodes (Java : GetChildNodes 메소드)를 검사합니다. 노드에는 노드가 텍스트 노드 (java : node.text_node) 또는 요소 (java : node.element_node)인지 여부를 확인할 수있는 "NoDetype"(Java : GetNodetype) 속성이 있습니다. 그래서 당신에게 예를 들면, 당신은 이것처럼 보이는 노드의 나무가 있습니다 ...
div (Element)
this is first (TextNode)
div (Element)
second (TextNode)
.
외부 div는 텍스트의 첫 번째 부분과 내부 div 두 개의 노드 만 직접 포함합니다. 그런 다음 내부 div는 텍스트 "두 번째"텍스트를 포함합니다.
그래서 노드가 텍스트 노드 인 경우, Node가 텍스트 노드 인 경우, 그렇지 않으면 요소를 변환합니다. 다른 종류의 노드, 코멘트 등이 있지만, 당신의 목적을 위해 당신은 아마도 당신이 그것을 무시할 수 있습니다.
W3C DOM API를 사용하고 있다고 가정합니다. http://docs.oracle.com/javase. /7/docs/api/org/w3c/dom/node.html
Elements divs=doc.getElementsByTag("div");
for (Element element : divs) {
System.out.println(element.text());
}
.
JSOUP HTML 파서를 사용하는 경우 작업이 필요합니다.