c++ - 自然语言C/C++中解析树的数据结构

标签 c++ c boost data-structures tree

我想将句子存储在 C/C++ 的数据结构中。示例这句话“这将文件上传到远程计算机。” 表示为:

(TOP
  (S
    (NP (DT This))
    (VP
      (VBZ uploads)
      (NP (NNS files))
      (PP (TO to) (NP (DT a) (JJ remote) (NN machine))))
    (. .)))

喜欢here 有没有一种简单的方法可以在 C/C++ 中实现?我正在手动构建树(不使用解析器)。

最佳答案

http://opennlp.apache.org/ 中提到的解析器非常复杂。它将句子分为名词、动词、介词等。如果您尝试用 c/c++ 重写它,这是一项艰巨的任务。

最好使用解析器并将输出读入 C/C++ 数据结构。

假设您有解析器的输出,则输出的格式相当简单。结构大概是这样的:

struct SentencePart {
  SType type;
  // If the type is a basic word type (e.g. NN, JJ, etc)
  char* word;      
  // If the type is a complex sub-sentence.
  struct SentencePart* sentence_part;
};

您可以创建类型的枚举(TOP、S、VP、NP 等)。然后您可以读取输入并根据您扫描的类型创建结构。

这是一种非常简单的方法,可能还有其他方法。

关于c++ - 自然语言C/C++中解析树的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284803/

相关文章:

c++ - 如何将实际的 sf::Sprite 对象保存在数组或 vector 中? C++

c++ - C/C++ 高效位数组

ssl - 使用客户端证书 sslv3 握手失败 boost asio GET

c++ - Dev C++ : How to fix “Unrecognisable insn, internal compiler error” (full error in description)

c++ - C++ 的 Makefile,包含一个 .o 文件和一个 .CPP 文件

c - 如何在 C 中取消引用 NULL 指针不会使程序崩溃?

c++ - Cmake 无法找到请求的 Boost 库。 - boost_coroutine 1.53

C++ Boost随机数生成问题

java - 是否可以在 DOS 6.22 中运行 java 应用程序?

c - scanf 中的 %[^\n]s 不等待输入并被跳过