正则表达式Java单词上下文

时间:2014-12-07 18:17:48

标签: java regex string matcher

我想要实现的是我想获得首字母缩略词的上下文。你能用正则表达式帮助我吗?

我循环遍历文本(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。根据为Di Dimanche杂志进行的民意调查显示,到2020年,54%的人支持在该市实施柴油禁令。

输出:
1-stgex将找到 pol。
2-redx将发现“巴黎居民认为战斗 pol。 优先考虑54%

另一个包含更多文字的例子

我需要遍历这一次,每次我匹配一个首字母缩写词来获得这个特定首字母缩略词的上下文。之后我正在处理一些数据挖掘。这是原始文本

  neklidnánemocná,vyš。 jemožnéprovéstpouzenativně

     

Na mozku je patrna hyperdenzitavpočátečnímúsekua。大脑媒体   vlevo,vlevo seobjevujijižsmazáníranicmezibazálnímigangliia   okolníbílouhmotouamírnádifuzníinpointenzitavperiventrikulární   bíléhmotě。 Kromětěchtočerstvýchzměnjsoupatrnéstaré   postmalatickézměnytemporálněapietookcipitálněvlevo。 Oboustranně   jsoupatrnévícečetnévaskulárnímikrolézevcentrum semiovale bilat。   Nejsouznámkynitrolebníhokrvácení。 skeletkalvyorientačněnihiltr。

     

Závěr:ZnámkydyperakutníischemievpovodíACMvlevo,staré   postmalatickéézměnyT,P a O vlevo,vaskulárnímikrolézevcentrum   semiovale bilat。

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

     

PozklidněnínemocnésepodařiloprivéstCTAG。 Na krkujenaznačený   kinkink na ACC vlevo a ACI vlevopodbazí。 Kalcifikacevkarotických   sifonechnepůsobí血流动力学významnéstenozy。 Intrakraniálněje   patrnýkonicýuzávěroperkulárníhoúsekua。 cerebri media vlevo pro   parietálnílalok。 Ostatnínáleznaintrakraniálnímtepennémřečištije   vmezíchnormy。

     

Závěr:uzávěroperkulárníhoúsekua。 cerebri media vlevo。

当然,如果匹配句子的结尾对我来说还可以:-)问题是找到所有首字母缩略词,即使它们在新行之前(\ n)

2 个答案:

答案 0 :(得分:0)

我会试试这个:

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

虽然使用正则表达式的自然语言处理不准确。

答案 1 :(得分:-1)

((?:[\w!@#$%&*]+\s+){5}([\w!@#$%&*]+\.)(?:\s+[\w!@#$%&*]+){5})

试试这个。看看演示。

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