Archive

Archive for the ‘编程’ Category

一个个人知识管理系统

2012/11/26 1条评论

今天看这篇文章:《个人提升方法三部曲:行动,记录、总结

过去这半年来,其实我一直在按这篇文章说的步骤来管理自己的知识。开发这个系统用了我大概一个月的业余时间,随时记录,每天生成总结。现在已经完全离不开它了。

基本技术路线:用semantic wiki做数据录入,用Python API(mwclient)做报表、分析。一点点自动化,每个知识点还是要人产生摘要,然后就可以用各种预先定义好的graph pattern推送到各个页面去。有一点点entity extraction,算是知识提取自动化。语义查询、检索、faceted browsing,可视化,支持知识的进化和重组。这些是知识管理的基本功能。半年多下来,大体每天能积累7-8个新的知识点,现在有上千个了。

知识就是一个点,一个点就是一句或者几句话。几个点可以组织在一个页面上,也可以通过查询流动到其他页面上。日历任务提醒现在已经做进去了,每天一个提醒邮件(当然也可以更频繁)。是一个Web应用,在浏览器里用。基本使用不需要编程。如果想定制,可以通过Python或者SMW

@Alisoncastle问:你的对于没知识体系的人来说适用吗。

适用。本来我的计划就是让知识能演化。每个点开始就是一句话,一个链接,一条微博。慢慢随着需要增长。增长的过程中结构出现。到一个知识点过大的时候就分裂成几个,通常是按其内部结构自然分割。然后到某个时候几个知识点需要汇总,就链在一起。并不需要一开始就有体系,体系是在发展中自然形成的。

链在一起主要还是靠人工。也可以预先写一个查询,满足某个条件的,比如提到某类词的(不是tagging),都汇总在一起。语义wiki这点还是很给力的。

@Alisoncastle又说: 我懒不喜欢人工,靠人工知识点多了后就一定会出问题 我就是多了后不知道该怎么并,于是就干脆不并。这是个很难的问题,如果能找到一些合理的自动规则,如同算法一般那就帅啦

我也没有好办法。要解决这个可能得开个公司专业搞。我觉得应可能的比例是60%统计+20%本体与NLP+20%启发式HCI。

目前组织大都还是手工,而且要求使用者自己有良好的记录习惯。我不管是看文章,开会还是写代码,潜意识里假设记下的每段话将来都可能长成新的知识点。但是妞妈就觉得这很别扭,还是用email管理方便

和Evernote比,界面当然不能比。主要的优势是每个知识点都有元数据(有一个很简单的表单),可以查询,可以用来做统计,生成图表,按日、按周做报表,提醒到期任务。可以让知识在页面之间流动,细粒度引用比较方便

当然现在还是太简陋了,界面惨不忍睹,只有绝对geek才能忍受。向妞妈推荐,被斥之以鼻。向周围一堆人推荐过了,几个项目里的合作伙伴,到现在没第二个人用。

开源问题:等我整理一下,建一个demo网站。可能要过一阵子

Advertisements
分类:编程, 语义网

语义博客[2008]

2012/01/02 2 条评论

【原文写于2008-05-05 到 2008-05-10】

I will try to use this wiki as a blogging tool.

{{BlogInfo
|page=Blog:Baojie
|title=A Blog test
|visitor=Jie Bao
|date=2008/05/05 01:16:38 AM EDT
|tag=Jie’s Words
}}

I get the basic idea on how to implement semantic blogging on the top of semantic wiki.

If an application — may not necessarily be an enterprise application — can be implemented by a relational database, then it can be implemented on a semantic wiki.

{{BlogInfo
|page=Blog:Baojie
|title=Semantic Blogging
|visitor=User:Baojie
|date=2008/05/09 02:51:24 PM EDT
|tag=Semantic Blog,Jie’s Words
}}

很久没有灌水。很久不写Blog,也在于没有一个Blog系统是我喜欢的。这个基于semantic wiki的blog,因为是自己搭的,自己喜欢,就再写一点。现在可以做到每个用户X能且只能编辑自己的Blog (在Blog:X之下的页面)。

我觉得这会发展成一个挺好的东西。[[Zemanta]]之类,不适合我。[[Twine]]我也不喜欢,没有真正的语义,主要是自然语言理解的东西。语义博客,当然要有一点本体,简单的也好。我不认为现在有任何一个Blog可以真正称为semantic blog的,虽然这个词出来有几年了。

{{BlogInfo
|page=Blog:Baojie
|title=接着灌水:语义博客
|visitor=User:Baojie
|date=2008/05/10 03:52:21 AM EDT
|tag=Semantic Wiki, Semantic Blog,Jie’s Words
}}

刚刚更新了一下回复机制。实验一下。应该每个用户的回复也成为自己Blog的一部分

{{BlogInfo
|page=Blog:Baojie
|title=刚刚更新了一下回复机制
|visitor=User:Baojie
|date=2008/05/10 05:01:29 AM EDT
|tag=Jie’s Words
}}

分类:编程, 语义网, 旧文

The Return of C 复习C语言

2011/06/18 2 条评论

有十年没用C了吧。从Hello World开始复习

习题代码在这里 http://codepad.org/users/baojie

资源:

基本功

链表 Linked List
树 Tree
数组和字符串
递归
I/O
未分类
分类:编程

从XSLT调用PHP

2011/06/15 留下评论

call PHP from XSLT [ XSLTProcessor->registerPHPFunctions() ]

<?php
$xml 
= <<<EOB
<all><user>bob</user></all>
EOB;
$xsl = <<<EOB
<?xml version=”1.0″ encoding=”UTF-8″?>
<xsl:stylesheet version=”2.0″
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform&#8221;
xmlns:php=”http://php.net/xsl”&gt;
<xsl:output method=”txt” encoding=”utf-8″ indent=”yes”/>
<xsl:template match=”all”>
<xsl:for-each select=”user”>
<xsl:value-of  select=”php:function(‘ucfirst’,string(.))”/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
EOB;
$xmldoc DOMDocument::loadXML($xml);
$xsldoc DOMDocument::loadXML($xsl);

$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStyleSheet($xsldoc);
echo 
$proc->transformToXML($xmldoc);
?>

分类:编程

How to explore an ontology using SPARQL 如何浏览一个本体

2011/05/31 1条评论

This article gives some typical SPARQL queries I used for getting familiar with an ontology which is only accessible by a querying endpoint.

1. Classes used

SELECT count(?x) ?type
WHERE{
 ?x a ?type.
}
GROUP BY ?type

2. OWL Classes

Sometime also need to find instances of rdfs:Class

SELECT ?x
WHERE{
 ?x a owl:Class .
}LIMIT 100

Instance counting

SELECT count(?y) ?x
WHERE{
 ?x a owl:Class .
 ?y a ?x .
}
GROUP BY ?x

3. Class Hierarchy

SELECT ?s ?o
WHERE{
 ?s rdfs:subClassOf ?o .
}
LIMIT 100

4. Properties used

SELECT DISTINCT ?p
WHERE{
 ?x ?p ?o .
}
ORDER BY ASC(?p)
LIMIT 100

5. Property Axioms
Domains and ranges

SELECT ?s ?domain ?range
WHERE{
 ?s a rdf:Property .
 ?s rdfs:domain ?domain .
 ?s rdfs:range ?range .
}
ORDER BY ?p
LIMIT 100

Inverse Properties

SELECT *
WHERE{
 ?p1 owl:inverseOf ?p2 .
}
ORDER BY ?p1
LIMIT 100

6. Instances (Triples)

Total triples:

SELECT count(*)
WHERE{
 ?s ?p ?o .
}

Triples by property

SELECT (count(*) AS ?c) ?p
WHERE{
 ?s ?p ?o .
}
GROUP BY ?p
ORDER BY ?c

7. Class Slots

Example query

SELECT DISTINCT ?p
WHERE{
 ?s a loticoowl:Member .
 ?s ?p ?o .
}
ORDER BY ?p
LIMIT 100

Some properties are used by instances with no class membership

SELECT DISTINCT ?p
WHERE{
?s ?p ?o .
OPTIONAL { ?s a ?x }
FILTER ( ! bound(?x) )
}

References:

分类:编程, 语义网

一个简单的PHP的RIF Parser

2011/04/20 2 条评论

目前支持了RIF-Core

代码很简单,目前乱七八糟的。可以读XML格式的输入,做presentation syntax的输出。正在做LP(logic program)格式的输出(这样就可以用LP的推理机来做推理),还没搞完。

使用的例子:

require_once("../rif2pres.php");
require_once("../rif2lp.php");

// parse XML syntax
$rifdoc = new RifDocument();
$rifdoc->load("ex8.rif");
	
// write in presentation syntax
$writer = new Rif2Presentation();
$writer->writeAnnotation = true;
$syntax = $writer->toPresentationSyntax($rifdoc);
echo $syntax;

//write in LP syntax
$writer = new Rif2LP();
$writer->toLP($rifdoc);
//print_r($writer->getLP());
echo $writer->getLP()->toString();

如果有兴趣参与,请和我联系(baojie@gmail.com)

SVN在这里
http://php-rif.svn.sourceforge.net/

分类:编程, 语义网