0

我是斯坦福 NLP 的新手。我正在使用词法解析器来解析文件的内容并提取名词短语。在解析行时,生成树结构需要更多时间。

我正在使用 Tregex 模式从一行中获取名词短语。

我正在使用 1 MB 文件进行解析,因此解析和提取名词短语需要两个多小时。

这是我正在使用的完整代码。

        Tree x = parser.apply(line);
        System.out.println("tree s=="+x);
        TregexPattern NPpattern = TregexPattern.compile("@NP <@/NN.?/");
        TregexMatcher matcher = NPpattern.matcher(x);

        while (matcher.findNextMatchingNode()) {
            Tree match = matcher.getMatch();
            List<TaggedWord> tWord = match.taggedYield();
            Iterator<TaggedWord> it = tWord.iterator();
            String str="";
            while(it.hasNext()){
                TaggedWord word = it.next();
                String taggedWord = word.tag();
                if(taggedWord.equals("NN")||taggedWord.equals("NNS")||taggedWord.equals("NNP")){
                    str = str+word.value()+" ";
                }
            }
       }

所以请帮助我如何提高性能或者是否有另一种方法来优化这段代码。

在此先感谢古斯。

4

1 回答 1

1

文本的全选区解析有点慢......如果你坚持下去,你可能无能为力。

但是有几点需要提一下:(i)如果你没有使用englishPCFG.ser.gz语法,那么你应该使用它,因为它比使用englishFactored.seer.gz更快并且(ii)解析很长的句子特别慢,因此,如果您可以通过省略或中断很长的句子(例如,超过 70 个单词)来获得,那将有很大帮助。特别是,如果某些文本来自网络抓取或其他任何内容,并且有一长串并非真正句子的内容,则过滤或划分它们可能会有很大帮助。

您可以采取的另一个方向是,您似乎并不需要一个完整的解析器,而只需要一个 NP 分块器(识别文本中最小名词短语的东西)。这些可以更快,因为它们不构建递归结构。斯坦福 NLP 工具中目前没有一个,但您可以通过在网络上搜索该术语找到一些。

于 2013-02-02T18:54:32.300 回答