2014-12-07 2 views
0

Что я хочу достичь, так это то, что я хочу получить контекст аббревиатуры. Можете ли вы помочь мне с регулярным выражением?Regex Java word context

Я зацикливаюсь над текстом (String) и ищет точки, после матча Я пытаюсь получить контекст конкретного найденного акронима, так что после этого я могу выполнить некоторую другую обработку, но я не могу получить контекст , Мне нужно взять как минимум 5 слов до и 5 слов после аббревиатуры.

//Pattern to match each word ending with dot 
    Pattern pattern = Pattern.compile("(\\w+)\\b([.])"); 


    Matcher matchDot = pattern.matcher(textToCorrect); 
    while (matchDot.find()) { 
     System.out.println("zkratka ---"+matchDot.group()+" ---"); 


     //5 words before and after tha match = context 
    // Matcher matchContext = Pattern.compile("(.{25})("+matchDot.group()+")(.{25})").matcher(textToCorrect); 
     Pattern patternContext = Pattern.compile("(?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,10}"+matchDot.group()+"(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,10}"); 
     Matcher matchContext = patternContext.matcher(textToCorrect); 
     if (matchContext.find()) {    
      System.out.println("context: "+matchContext.group()+" :"); 

    //  System.out.println("context: "+matchContext.group(1)+" :"); 
    //  System.out.println("context: "+matchContext.group(2)+" :"); 
     } 

    } 

Пример:

вход: Около 84% жителей Парижа видеть борьбу Pol. в качестве приоритета, а 54% поддержали запрет на дизельное топливо в городе к 2020 году, согласно опросу, проведенному для журнала du Dimanche.

мощность:
1-е регулярное выражение найдет pol.
2-й регулярное выражение будет найти «жителей Парижа смотреть борьбуPol.в качестве приоритета и 54%»

Другой пример с большим количеством текста

мне нужно перебрать этот раз и каждый раз, когда я сопоставляю аббревиатуру, чтобы получить контекст этого конкретного акронима. После этого я обрабатываю некоторые данные. Вот исходный текст

neklidná nemocná, vyš. je možné provést pouze nativně

Na mozku je patrna hyperdenzita v počátečním úseku a. cerebri media vlevo, vlevo se objevuje již smazání hranic mezi bazálními ganglii a okolní bílou hmotou a mírná difuzní hypointenzita v periventrikulární bílé hmotě. Kromě těchto čerstvých změn jsou patrné staré postmalatické změny temporálně a parietookcipitálně vlevo. Oboustranně jsou patrné vícečetné vaskulární mikroléze v centrum semiovale bilat. Nejsou známky nitrolebního krvácení. skelet kalvy orientačně nihil tr.

Z А В Е Р: Známky hyperakutní ischemie против povodí АСМ vlevo, STARE postmalatickéé změny T, P A O vlevo, vaskulární mikroléze v Центр semiovale BILAT.

CT AG: vyš. po bolu k.l ..

Po zklidnění nemocné se podařilo provést CT AG. Na krku je naznačený kinkink na ACC vlevo a ACI vlevo pod bazí. Kalcifikace v karotických sifonech nepůsobí hemodynamicky významné stenozy. Intrakraniálně je patrný konický uzávěr operkulárního úseku a. мозговой медиа vlevo pro parietální lalok. Остатки на intrakraniálním tepenném řečišti je v mezích normy.

Z á v ě r: uzávěr operkulárního úseku a. мозговой медиа vlevo.

Конечно, если он соответствует конец предложения хорошо для меня :-) Вопрос заключается в том, чтобы найти все аббревиатуры, даже если они до того новой строки (\ п)

+0

Вы можете разместить некоторые материалы и ожидаемый результат – vks

+0

Для этого вам необходимо иметь предустановленный список аббревиатур, это не представляется возможным сделать вывод о том, что подстрока является аббревиатурой от его формата. –

+0

его трудно иметь все, потому что моя задача состояла в том, чтобы автозаполнять аббревиатуры, поэтому нет способа, как иметь определенный список из них. Тем не менее, если я автозаполняю не менее 70% из них, это будет большим успехом. – user2670818

ответ

-1
((?:[\[email protected]#$%&*]+\s+){5}([\[email protected]#$%&*]+\.)(?:\s+[\[email protected]#$%&*]+){5}) 

Try this.See demo.

https://regex101.com/r/aQ3zJ3/9

+0

это работает, но давайте предположим, что у меня есть более длинный текст с гораздо большим количеством сокращений и много точек, это не сработает. Мне нужно, чтобы это было более абстрактным с динамическим сокращенным словом в середине. Вот почему у меня есть найденная аббревиатура в середине моего второго регулярного выражения. – user2670818

+0

@ user2670818 https://regex101.com/r/aQ3zJ3/10 ??????/ – vks

+0

отлично, спасибо! – user2670818

0

Я хотел бы попробовать это:

(?:\w+\W+){5}((?:\w.?)+)(?:\w+\W+){5} 

Хотя обработка естественного языка с использованием регулярных выражений не может быть точным.