1

我希望有人可以帮助我:首先,我仍然是 Java 的新手,但我想会慢慢提高。

所以,我有一个带有语言注释的 XML 文件,我想访问一个特定节点以 a) 对其执行模式匹配操作 b) 对匹配项执行进一步操作

这是文本示例,显示节点:

  <token id="13">
        <word>.</word>
        <lemma>.</lemma>
        <CharacterOffsetBegin>57</CharacterOffsetBegin>
        <CharacterOffsetEnd>58</CharacterOffsetEnd>
        <POS>.</POS>
        <NER>O</NER>
      </token>
    </tokens>
    <parse>(ROOT (S (NP (DT The) (NN world)) (VP (VBZ owes) (NP (DT all)) (NP (NP (NP (PRP$ its) (ADJP (RB onward) (NP (NNS impulses)) (PP (TO to))) (NNS men)) (ADJP (RB ill))) (PP (IN at) (NP (NN ease))))) (. .))) </parse>
    <basic-dependencies>
      <dep type="det">
        <governor idx="2">world</governor>
        <dependent idx="1">The</dependent>
      </dep>
      <dep type="nsubj">
        <governor idx="3">owes</governor>
        <dependent idx="2">world</dependent>
      </dep>
      <dep type="iobj">
        <governor idx="3">owes</governor>
        <dependent idx="4">all</dependent>
      </dep>
      <dep type="poss">
        <governor idx="9">men</governor>
        <dependent idx="5">its</dependent>
      </dep>

(所以在这里,我有一些文本的语言注释,例如一些标记,词性(POS),命名实体识别(NER),以及句法/依赖解析。这实际上是Stanford CoreNLP工具包的输出应用于文本..没有添加整个文件,因为它很大)

我的问题是:根据我一直在阅读的内容,StaX 解析器似乎是访问文件并使用我的操作生成新文件的好方法。这是正确的吗?我的问题还包括,我可以使用 StaX 进行模式匹配操作吗?

提前一千感谢。

4

1 回答 1

0

该表达式(ROOT ...)采用称为 S 表达式的格式。Java SE 中的任何内容都无法解析它,因此您必须做其他事情。

当然,您必须使用 StAX(或其他东西)来解析 xml 文件。这样,您将获得上述字符串,作为字符串。您将不得不对这些字符串运行另一个解析器以获取它们的结构。

初步的谷歌搜索给了我 http://rosettacode.org/wiki/S-Expressions#Java它基于 http://jfkbits.blogspot.jp/2008/05/thoughts-on-s-expression-parser.html . 但是您可以自己使用“Java 中的 S-expression parser”之类的搜索词并查看前几个结果以查看适合您的内容。

于 2015-04-12T08:25:18.783 回答