0

我正在做一个项目,我被要求进行语义搜索。该场景是一个数据库,其中包含一个包含 3 条信息的表,即医生姓名、患者姓名和就诊日期。我被要求创建一个包含 3 个字段的表单:医生、患者和日期。因此,当用户想要搜索患者的相应医生或相应患者的医生或他们的日期时,他们只需输入任何字段即可从数据库中检索信息。我使用正则表达式在 C# 中完成了用于字符串操作和信息检索的编码。但主要任务是搜索应该使用 RDF 和 URI。

现在我已经完成了大部分编码工作,有人可以帮助我如何使用 RDF 和 URI 创建搜索,是否有任何解决方案,如何在 C# 中集成 RDF,是否有任何文档。

但是根据我的主管的要求,他要求我建立一个与 RDF 一起使用的搜索,我的意思是患者的详细信息(例如患者姓名)、医生姓名和日期将以 URI 的形式定位患者、医生的详细信息和数据库中的日期信息,因此如果有人试图搜索医生或患者等任何信息,只需在相应字段中输入他们的姓名并检索信息。为了您的理解,我附上了我的代码的 2 个快照。

图 1: http: //img29.imageshack.us/i/15035706.jpg
图 2:http: //img31.imageshack.us/img31/1117/86105845.jpg

第一张图片是我将所有详细信息输入数据库的地方,第二张图片是搜索。

这是我项目的总体思路,你能告诉我如何做到这一点吗?

如果有人能尽快帮助我,我将不胜感激。

4

5 回答 5

2

您可以使用LinqToRdf做您需要的事情。LinqToRdf 公开了两个 LINQ 查询提供程序(即您将需要 .NET 3.5+),其中一个产生符合标准的SPARQL查询。

这是一个典型的 LinqToRdf 查询,如果您熟悉 LINQ to SQL,应该很自然:

MusicDataContext ctx = new MusicDataContext(@"http://localhost/linqtordf/SparqlQuery.aspx");
var q = (from t in ctx.Tracks
     where t.Year == "2006" &&
           t.GenreName == "History 5 | Fall 2006 | UC Berkeley"
     orderby t.FileLocation
     select new {t.Title, t.FileLocation}).Skip(10).Take(5);

foreach (var track in q)
{
   Console.WriteLine(track.Title + ": " + track.FileLocation);
} 
于 2009-10-12T02:41:17.647 回答
2

执行基于 RDF 和 URI 的搜索将首先取决于您的数据是否在 RDF 中。如果不是,您必须即时或永久地将其从当前形式转换为 RDF。要即时执行此操作,您可以使用 D2R 之类的技术,它将关系数据库映射到 RDF http://www4.wiwiss.fu-berlin.de/bizer/d2r-server/

还有一些其他语义 Web C# 的东西,比如 Rowlex http://rowlex.nc3a.nato.int/,它更基于 OWL,或者有我自己的 dotNetRDF 库http://www.dotnetrdf.org但这只是即将成为一个第一个 Alpha 版本,所以我不推荐它用于任何生产系统。Alex 提到的 SemWeb 非常好,而且扩展性特别好——唯一的缺点是它是 .Net 2.0,所以如果你想用它做 LINQ,你需要一个单独的库

关于你的问题的问题...

您的问题不清楚您所说的语义搜索是什么意思,您确定您实际上是要进行 RDF 搜索,还是有人只是在规范中指定了“语义搜索”并且您在 Google 上搜索并获得了有关 RDF 的文章?语义搜索并不一定意味着需要 RDF,它可能是您实际上想要进行自然语言搜索。

我的意思是,您可能希望能够搜索“Smith 医生的患者”之类的内容,并且您的搜索引擎应该能够将其解释为搜索医生字段对应于 Smith 医生的患者。

同样,我可能是错的,您确实可能正在尝试构建听起来很像 TimBL 2001 年在语义网络上的《科学美国人》文章中的示例的东西。

编辑

因此,当您确实想要进行正确的 RDF 搜索时,我建议您将数据放入三重存储而不是数据库,并且最好使用提供 SPARQL 查询的三重存储,这样您就可以将查询表单上的输入转换为 SPARQL用它查询和查询三重存储。

也许看看 Talis http://www.talis.com或 Virtuoso http://www.openlinksw.com/virtuoso/

如果您决定使用 SemWeb,那么您可以使用它提供的 Triple Store。

于 2009-07-29T10:42:42.840 回答
1

我建议您尝试RDFSharp ( http://rdfsharp.codeplex.com/ ),因为据我从您的问题中了解到,您可能需要快速设置一个 RDF 应用程序,该应用程序能够执行基本的基于三元组的搜索,例如 SUBJECT=" xxx";PREDICATE=NULL;OBJECT="yyy"。
随意尝试,当然还有更强大的工具,但对于您的场景,我相信它是最简单的应用。

于 2012-10-31T16:32:01.473 回答
0

RDF 的 AC# 库似乎在 LinqToRDF 社区中变得非常流行。该项目由 Andrew Matthews 发起,我认为自 2007b 以来一直在进行。该软件已在 Google COde 上运行,可在此处找到:

LinkToRDF

与该库一起,还有一个称为“LinqToRDF 设计器”的东西,它适合 Visual Studio 并允许您以图形方式对 RDF 进行建模。

于 2009-07-31T14:14:50.343 回答
0

在您描述的场景中使用语义网络技术是矫枉过正的。但是,如果您对在 .NET 和 SQL 中使用语义 Web 标准的成熟 .NET 库感兴趣,请务必查看Intellidimension 的产品

于 2009-07-31T13:45:36.000 回答