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
	- 上传了 CNUtils2Demov1.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 测试
 




