JIT-компиляторы имеют больше данных, которые они могут использовать для влияния на оптимизацию. Конечно, кто-то на самом деле должен написать код для использования тех данных, таким образом, это не простое как это.
Я нашел следующее решение: Использование xpath-запроса в XHTML-Source-Code (я взял печатную версию, потому что она короче, но она также работает в обычной версии).
//html/body//div[@id='bodyContent']/p[1]
Это работает на немецком и английском языках Мы с Википедией не нашли статьи, в которой не выводился бы первый абзац. Решение также довольно быстрое, я также думал взять только первые x символов xhtml, но это сделало бы xhtml недействительным.
Если кто-то ищет здесь JAVA-код, это значит:
private static DocumentBuilderFactory dbf;
static {
dbf = DocumentBuilderFactory.newInstance();
dbf.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
}
private static XPathFactory xpathf = XPathFactory.newInstance();
private static String xexpr = "//html/body//div[@id='bodyContent']/p[1]";
private static String getPlainSummary(String url) {
try {
// OPen Wikipage
URL u = new URL(url);
URLConnection uc = u.openConnection();
uc.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1) Gecko/20090616 Firefox/3.5");
InputStream uio = uc.getInputStream();
InputSource src = new InputSource(uio);
//Construct Builder
DocumentBuilder builder = dbf.newDocumentBuilder();
Document docXML = builder.parse(src);
//Apply XPath
XPath xpath = xpathf.newXPath();
XPathExpression xpathe = xpath.compile(xexpr);
String s = xpathe.evaluate(docXML);
//Return Attribute
if (s.length() == 0) {
return null;
} else {
return s;
}
}
catch (IOException ioe) {
logger.error("Cant get XML", ioe);
return null;
}
catch (ParserConfigurationException pce) {
logger.error("Cant get DocumentBuilder", pce);
return null;
}
catch (SAXException se) {
logger.error("Cant parse XML", se);
return null;
}
catch (XPathExpressionException xpee) {
logger.error("Cant parse XPATH", xpee);
return null;
}
}
используйте его, вызвав getPlainSummary ("http://de.wikipedia.org/wiki/Uma_Thurman");
У меня была такая же потребность, и я написал для этого некоторый код Python.
Скрипт загружает статью из Википедии с заданным именем, анализирует ее с помощью BeautifulSoup и возвращает несколько первых абзацев.
12155] Код находится по адресу http://github.com/anandology/sandbox/blob/master/wikisnip/wikisnip.py .
Википедия предлагает скачать тезисы . Хотя это довольно большой файл (в настоящее время 2,5 ГБ
), он предлагает именно ту информацию, которую вы хотите, для всех статей.
Я открыл статью Альберта Эйнштейна в Firefox и нажал «Просмотреть исходный код». Его довольно легко разобрать с помощью парсера HTML. Вам следует сосредоточиться на
и удалить из него другой HTML-код.
Вам нужен синтаксический анализатор, который может читать разметку Википедии. Попробуйте WikiText или парсеры, входящие в состав XWiki .
Это позволит вам игнорировать все, что вам не нужно (заголовки, таблицы).
Как и следовало ожидать, вам, вероятно, придется разобрать исходный код, скомпилированный HTML, или оба. Однако Википедия: Lead_section может дать вам некоторое представление о том, чего ожидать от хорошо написанных статей.
Например, если у вас есть результат в виде строки вы найдете текст:
<div id="bodyContent">
, а после этого индекса вы найдете первый
<p>
, который будет индексом первого упомянутого вами абзаца.
попробуйте этот URL Ссылка на контент (просто работает в браузере)
Ну, при использовании самого источника Wiki вы можете просто вырезать все шаблоны в начале. Это может работать достаточно хорошо для большинства статей, у которых есть информационные окна или некоторые сообщения вверху.
Однако некоторые статьи могут помещать начальную аннотацию в сам шаблон, так что там будет немного сложно.
Другой способ, возможно, более надежным было бы взять содержимое первого тега Обычно, Википедия написана для человеческого употребления с минимальной поддержкой чего-либо семантического.
, который появляется непосредственно в тексте статьи (т.е. не вложен в таблицу или что-то в этом роде). Это должно удалить информационные блоки и другие вещи в начале, поскольку они, вероятно (я не совсем уверен)
s или
Похожие вопросы: