65.9K
CodeProject 正在变化。 阅读更多。
Home

C# ConceptNetUtils (CNU) 版本 2

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.16/5 (9投票s)

2006年7月18日

CPOL

6分钟阅读

viewsIcon

131419

downloadIcon

1014

运行 ConceptNet:常识语义网络的 C# 动态链接库。

Sample Image - cnu2.jpg

引言

ConceptNet¹ 是一个常识知识库,主要由 Hugo Liu 和 Push Singh(麻省理工学院媒体实验室)编写和整理的 Open Mind 项目组成。ConceptNet 2.1(撰写本文时的当前版本)还包括 MontyLingua,一个自然语言处理包。ConceptNetPython 编写,但其常识知识库存储在文本文件中。要了解有关 ConceptNet 完整概述的更具体细节,请阅读 Liu 和 Singh 的出色论文 (pdf)。MIT 提供的大多数项目都不是用 Microsoft Visual Studio .NET 编写的,我正尝试将 ConceptNet 用于教育、研究目的,并只是为了享受所涉及的技术。此版本为 2.x。它与 Microsoft 的 IronPython 紧密集成。

Visual Studio .NET C# ConceptNetUtils (CNU) 版本 2.x 类库

ConceptNetUtils (CNU) 版本 2 使用 IronPython 和编辑过的 ConceptNet 脚本文件来获得与 Python 版本 ConceptNet 相同的结果。唯一的缺点是使用 ConceptNetUtils 加载和创建语义网络时会损失一些速度。这种损失不大,考虑到拥有一个 .NET 兼容的 ConceptNet 的优点,这可能是值得的。以下是 CNU 方法和命名空间的摘要。大多数详细文档和解释都可以在代码本身以及 ConceptNet 的文档中找到。您还可以阅读我的第一篇文章 使用 C# 中 MIT 的 ConceptNet 2.1 获得乐趣

CNU 的命名空间

CNU ConceptNet
ConceptNetUtils.CNDB ConceptNetDB.py
ConceptNetUtils.CNTools ConceptNetNLTools.py
ConceptNetUtils.Monty 杂项 MontyLingua 模块支持

 

 

CNU 它的功能
ConceptNetUtils.Converts 不属于 ConceptNet 的杂项转换帮助方法。
ConceptNetUtils.Misc 混合了 ConceptNet 和非 ConceptNet 相关的帮助方法。(截至 CNU v2.7.9.0b,此命名空间仍在构建中,但如果您通过 IronPython 加载 CNU *.py 脚本文件,则 MontyLingua 的所有功能仍然可用。这些脚本文件是嵌入式的,也可以在 CNU 项目的“...\CNU\ConceptNetUtils2\ConceptNetUtils2”路径中找到。
[例如 engine1.Execute("import CNUMontylingua")])
ConceptNetUtils.Forms 截至 CNU v2.7.9.0b,此命名空间包含两个类。
FileOptionsForm 是一个 System.Windows.Forms.Form,用于设置加载 ConceptNet 的谓词文件或您自己的谓词文件的选项。
ProgressbarForm 是一个 System.Windows.Forms.Form,用于在加载谓词文件时显示进度条。
ConceptNetUtils.IPEWrapper PythonEngine 的输出在 Stream 中,因此此类有助于获取该输出。
ConceptNetUtils.Paths MiscDirs:保存杂项目录路径(ConceptNet 路径位于此处。)
Python24Dirs:保存您常用的 Python 2.4 路径
IronPythonDirs:保存您常用的 IronPython 路径。

 

 

演示

ConceptNet 2.1 附带了自己的 Python 演示,名为“ConceptNet Mini-Browser”。它以交互方式探索 ConceptNet API。ConceptNetUtils 演示是该迷你浏览器的 .NET 版本。它首先加载 MontyLingua 的自然语言处理方法和规则,然后加载 ConceptNet 的默认谓词文件。(建议您使用 2.0 GHZ 或更高处理器,否则您可能需要等待五分钟才能创建语义网络)。在文本框中,输入一些输入文本(一个单词、词组、句子或多个句子),然后单击绿色按钮(“节点级别”模式:处理单词和词组)或黄色按钮(“文档级别”模式:处理句子和段落)。

  • 浏览:显示来自节点级别文本输入的匹配谓词节点。(ConceptNetUtils.CNDB.display_node():返回 IronPython 列表中来自节点级别文本输入的匹配谓词节点)
  • 上下文:显示匹配的相关主题。返回 IronPython 列表中来自节点级别文本输入的相关主题。(ConceptNetUtils.CNDB.get_context():返回 IronPython 列表中相关主题。)
  • 投影:计算来自节点级别文本输入的所有可用上下文投影(结果、细节、空间和情感)。(ConceptNetUtils.CNDB.get_all_projections():返回 IronPython 列表中的对。)
  • 类比:显示来自节点级别文本输入的按排名排序的概念列表。(ConceptNetUtils.CNDB.get_analogous_concepts():如果 simple_results_p = 1,则返回 IronPython 列表中按排名排序的概念。)
  • 猜测上下文:显示来自文档级别文本输入的最可能上下文列表。
  • 猜测主题:显示来自文档级别文本输入的最可能相关主题列表。
  • 猜测情绪:显示来自文档级别文本输入的最可能情绪(高兴、悲伤、愤怒、恐惧、厌恶、惊讶)的百分比。
  • 总结:显示来自文档级别文本输入的句子形式的解释。

如何运行演示

  1. 下载 ConceptNet 2.1 (建议解压到 ...\My Documents\Python Projects\conceptnet2.1
  2. 下载 Python 2.4(建议解压到 C:\Python24
  3. 下载 IronPython-1.1RC1-Bin.zip (建议解压到 ...\My Documents\Visual Studio 2005\Projects
  4. 下载并解压本文的 .NET 解决方案和项目文件。打开 CNUtils2Demo.sln
  5. 手动编辑 CNUDB.py(第 10 行)和 CNUMontylingua.py(第 8 行)中的本地路径 [文件可以在解决方案资源管理器中找到],以指向您的 conceptnet2.1conceptnet2.1\montylingua 目录。
  6. 从 Microsoft VC# 2005 解决方案资源管理器中,通过浏览到您解压 IronPython 下载的位置的 IronPython.dllIronMath.dll 来添加引用。
  7. 重新构建解决方案中的两个项目。演示现在应该可以执行了。

(请注意:如果您有 2.0 GHZ 或更高处理器,我建议运行此演示,否则您可能需要等待 5 分钟以上才能创建语义网络。)

结论

ConceptNet 2.1 可以作为工具来创建个性化的常识知识库网络。ConceptNet 2.1 下载中包含了 MontyLingua。一旦您了解它的操作方式,它就是一种快速简单的自然语言处理实现。希望这个 Microsoft Visual Studio .NET 类库项目能提供信息、实用且有趣。

参考文献

  • ¹ Liu, H. & Singh, P. (2004) ConceptNet: A Practical Commonsense Reasoning Toolkit. BT Technology Journal, To Appear. Volume 22, forthcoming issue. Kluwer Academic Publishers.(根据 ConceptNet 的使用条款许可,对 ConceptNet 源代码的任何修改都已在 CNU*.py 文件中记录。)[^]
  • ConceptNet: A Practical Commonsense Reasoning Toolkit, Hugo Liu and Push Singh Media Laboratory Massachusetts Institute of Technology [^]
  • Investigating ConceptNet, Dustin Smith; Advisor: Stan Thomas, Ph.D. December 2004 [^]
  • 开放思维常识项目 [^]
  • IronPython: Workspace Home [^]
  • Python 官方语言网站 [^]

更新

  • 7/17/06
    • 上传了 CNUtils2Demo v1.0.0.0rc 项目文件
    • 上传了 ConceptNetUtils2.dll v2.7.9.1b,包括 CNU*.py 脚本(注意:ConceptNetUtils2.dll 依赖于 IronPython.dllCNU*.py 脚本)
  • 7/25/06
    • 上传了带更新的 ConceptNetUtils2 项目文件的 CNUtils2Demo
    • 上传了 ConceptNetUtils2.dll v2.7.9.3b
    • 将类 ConceptNetUtils.Monty.Monty 更改为 ConceptNetUtils.Monty.MontyLingua
    • 更新了使用 dir(c.nltools.m) 获得最快性能的 ConceptNetUtils.Monty.MontyLingua
    • 将 {jist_predicates(), jist(), split_paragraphs(), split_sentences()} 方法添加到 ConceptNetUtils.Monty.MontyLingua
  • 7/26/06
    • 更新以支持 IronPython-1.0-RC1
    • 上传了带更新的 ConceptNetUtils2 项目文件的 CNUtils2Demo
    • 上传了 ConceptNetUtils2.dll v2.8.0.0rc
  • 2/27/07
    • 请注意:IronPython 1.1 Beta 1 由于新的内置数组模块将无法与 CNU 一起工作。IronPython 开发团队将在下一个版本中修复此问题
    • 开始开发直接与 ConceptNetXMLRPCServer 协作的 CNU XML-RPC 类
  • 3/24/07
    • 上传了 ConceptNetUtils2.dll v2.8.2.0rc。删除了 array.py,因为内置数组已修改为类似于 CPython,因此现在没有问题了。IronPython-1.1RC1 是目前唯一可以与 ConceptNetUtils2.dll v2.8.2.0rc 一起工作的 IronPython 版本
    • 已成功通过 IronPython-1.1RC1 测试
© . All rights reserved.