C# ConceptNetUtils (CNU) 版本 2
运行 ConceptNet:常识语义网络的 C# 动态链接库。
- 下载源文件 - 241.02 KB
- 下载 DLL v2.8.2.0rc,包括 CNU*.py 脚本 - 60.9 KB
- (注意:ConceptNetUtils2.dll 依赖于 IronPython.dll 和 CNU*.py 脚本。)
引言
ConceptNet¹ 是一个常识知识库,主要由 Hugo Liu 和 Push Singh(麻省理工学院媒体实验室)编写和整理的 Open Mind 项目组成。ConceptNet
2.1(撰写本文时的当前版本)还包括 MontyLingua,一个自然语言处理包。ConceptNet
用 Python 编写,但其常识知识库存储在文本文件中。要了解有关 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 列表中按排名排序的概念。) - 猜测上下文:显示来自文档级别文本输入的最可能上下文列表。
- 猜测主题:显示来自文档级别文本输入的最可能相关主题列表。
- 猜测情绪:显示来自文档级别文本输入的最可能情绪(高兴、悲伤、愤怒、恐惧、厌恶、惊讶)的百分比。
- 总结:显示来自文档级别文本输入的句子形式的解释。
如何运行演示
- 下载 ConceptNet 2.1 (建议解压到 ...\My Documents\Python Projects\conceptnet2.1)
- 下载 Python 2.4(建议解压到 C:\Python24)
- 下载 IronPython-1.1RC1-Bin.zip (建议解压到 ...\My Documents\Visual Studio 2005\Projects)
- 下载并解压本文的 .NET 解决方案和项目文件。打开 CNUtils2Demo.sln。
- 手动编辑 CNUDB.py(第 10 行)和 CNUMontylingua.py(第 8 行)中的本地路径 [文件可以在解决方案资源管理器中找到],以指向您的 conceptnet2.1 和 conceptnet2.1\montylingua 目录。
- 从 Microsoft VC# 2005 解决方案资源管理器中,通过浏览到您解压 IronPython 下载的位置的 IronPython.dll 和 IronMath.dll 来添加引用。
- 重新构建解决方案中的两个项目。演示现在应该可以执行了。
(请注意:如果您有 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.dll 和 CNU*.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 测试