2013-04-18 4 views
1

Я пытаюсь получить введение из статьи в Википедии, чтобы включить ее в отчет. Например, для этой статьи: http://en.wikipedia.org/wiki/MAP3K8Экспорт статьи в Википедии, чтобы получить итоговую информацию

Я хочу получить:

митоген-активируемой протеинкиназы киназа киназы 8 представляет собой фермент, который в организме человека кодируется геном MAP3K8. Этот ген был идентифицирован своей онкогенной трансформирующей активностью в клетках. Закодированный белок является членом семейства серин/треонин-протеинкиназы.
Эта киназа может активировать пути киназы MAP и JNK. Показано, что эта киназа активирует киназы IkappaB и, таким образом, индуцирует ядерную продукцию NF-kappaB . Было обнаружено, что эта киназа способствует продуцированию TNF-альфа и IL-2 при активации T-лимфоцитов . Исследования аналогичного гена у крыс показали прямое вовлечение этой киназы в протеолиз NF-kappaB1, p105 (NFKB1). Этот ген может также использовать нижний по ходу внутрикадровый кодон для начала трансляции и, таким образом, получить изоформу, содержащую более короткий N-конец . Было показано, что более короткая изоформа показывает более слабую трансформационную активность. У мышей этот ген известен как Tpl2 , и он является геном-супрессором опухоли, отсутствие которого способствует развитию и прогрессированию рака .

Я получаю страницу с этим URL: http://en.wikipedia.org/wiki/Special:Export/MAP3K8

И преобразовать код с этого поста: http://forums.asp.net/t/1066507.aspx/1 в C#:

HttpWebRequest request =(HttpWebRequest)HttpWebRequest.Create("http:// en.wikipedia.org/wiki/Special:Export/MAP3K8"); 
    request.Accept = "text/hmtl"; 
    request.Credentials = System.Net.CredentialCache.DefaultCredentials; 
    HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 
    Stream responseStream = response.GetResponseStream(); 
    XmlTextReader reader = new XmlTextReader(responseStream); 
    String NS = "http://www.mediawiki.org/xml/export-0.8/"; 
    XPathDocument doc = new XPathDocument(reader); 
    reader.Close(); 
    response.Close(); 
    XPathNavigator myxpathnav = doc.CreateNavigator(); 
    XPathNodeIterator nodesText = myxpathnav.SelectDescendants("text", NS, false); 
    while (nodesText.MoveNext()) 
    { 
     ViewBag.Message += nodesText.Current.InnerXml; 
    } 
    ViewBag.Summary = getSummary(ViewBag.Message); 
    return View(); 

getSummary метод, согласно шаблону БОР: http://en.wikipedia.org/wiki/Template:PBB_Controls

Я только хочу получить информацию о белках, если это следует за этим.

public string getSummary(string page) 
    { 
     string res = ""; 
     //The introduction is in 2 parts: 
     //1st between "{{PBB|geneid=1326}}" and <!-- The PBB_Summary (.)* --> 
     string intro = ""; 
     //2nd between "summary_text =" and "==" 
     //http://en.wik ipedia.org/wiki/Special:Export/MAP3K8 is used as example 

     string summary = ""; 
     try 
     { 
      intro = page.Split(new string[] { "}}" }, StringSplitOptions.None)[1]; 

      intro = intro.Split(new string[] { "<!--" }, StringSplitOptions.None)[0]; 
      intro = deleteMediaWikiTag(intro); 
     } 
     catch(Exception) 
     { 
      intro = ""; 
     } 
     try 
     { 
      summary += page.Split(new string[] { "summary_text =" }, StringSplitOptions.None)[1]; 
      summary = summary.Split(new string[] { "==" }, StringSplitOptions.None)[0]; 
      summary = deleteMediaWikiTag(summary); 
     } 
     catch(Exception) 
     { 
      summary = ""; 
     } 
     res = intro + "\n\n" + summary; 
     return res; 
    } 

    public string deleteMediaWikiTag(string text) 
    { 
     string res = ""; 
     // this is working well 
     Regex reg = new Regex("{{.*(}})*|{{|}}|'''|<!--.*-->|]]|([[]){2}"); 
     res = reg.Replace(text,""); 
     //I don't understand what is wrong with this regex 
     Regex regprime = new Regex("&lt(.)*(>){1}"); 
     res = regprime.Replace(res, "PRIME"); 
     return res; 
    } 

Моя проблема заключается в выполнении deleteMediaWikiTag(summary), потому что я теряю конец сводной части, которая:

У мышей этот ген известен как Tpl2 и это опухолевый супрессор ген, отсутствие которого способствует развитию и прогрессированию рака.

Перед тем, как обращаться в регулярных выражениях, этот текст выглядит следующим образом:

<ref name="entrez" /> 
    In mice, this gene is known as Tpl2 and it is a tumor suppressor gene whose absence contributes to the development and progression of cancer. 
    <ref>{{cite web|last=DeCicco-Skinner|first=Kathleen|title=Loss of tumor progression locus 2 (tpl2) enhances tumorigenesis and inflammation in two-stage skin carcinogenesis|url=http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3460638/}}</ref> 

Итак, в соответствии с моим регулярным выражением, я ожидал что-то вроде: (PRIME используется для выделения матчей, в конце , я буду удалять весь соответствующий мое регулярное выражение)

PRIME In mice *.....* PRIME 

Но я получаю:

PRIME 

Так что "&lt(.)*(>){1}" сопрягает с целой части (первый & ЛТ и последний >, но я прошу матч только один раз Узор > что более чем один раз, если я все ...

Что не так с этим регулярным выражением? Я что-то пропустил? Может быть, это лучший способ разобрать это? (но ни один из парсеров, которых я нашел, не убедил меня)

P.S. Мой парсер работает с: http://en.wikipedia.org/wiki/NFKB2 или http://en.wikipedia.org/wiki/APOA4, но я хочу сделать это более надежно.

+1

Вы не должны разбирать XML с регулярным выражением. Попробуйте использовать парсер, например [lxml] (http://lxml.de/). – Walls

+0

я установил свой вопрос на этой странице, изменив Regex в: "(.) | (.) И ЛТ * (/ >) {1} & ЛТ * (>) {1}" > Я испытают больше страниц с моим парсером, чтобы узнать, не забыл ли я разметки в средствах массовой информации, но если кто-то может объяснить мне, почему первая версия не работает, это был бы хороший урок. –

+0

Вы пытались использовать «рефераты Yahoo рефератов» на download.wikimedia.org? – Nemo

ответ

0

Я действительно не могу найти проблему с выходом. Оба регулярных выражения работают нормально. Я бы рекомендовал использовать онлайн-тестер регулярного выражения, прежде чем внедрять его в код. Попробуйте это: http://gskinner.com/RegExr/

Смежные вопросы