如何使用 DBpedia 属性构建主题层次结构?

2024-02-19

我试图通过遵循下面提到的两个 DBpedia 属性来构建主题层次结构。

  1. skos:更广泛的财产
  2. dcterms:主题属性

我的目的是给这个词确定它的主题。例如,给出这个词; “支持向量机”,我想从中识别主题,例如分类算法、机器学习等。

然而,有时我对如何构建主题层次结构感到有点困惑,因为我获得了超过 5 个主题 URI 和许多更广泛属性的 URI。有没有办法测量强度或其他东西并减少我从 DBpedia 获得的额外 URI 并仅分配最高可能的 URI?

似乎有两个问题。

  1. 如何限制 DBpedia Spotlight 结果的数量。
  2. 如何限制特定结果的主题和类别数量。

我当前的代码如下。

from SPARQLWrapper import SPARQLWrapper, JSON
import requests
import urllib.parse

## initial consts
BASE_URL = 'http://api.dbpedia-spotlight.org/en/annotate?text={text}&confidence={confidence}&support={support}'
TEXT = 'First documented in the 13th century, Berlin was the capital of the Kingdom of Prussia (1701–1918), the German Empire (1871–1918), the Weimar Republic (1919–33) and the Third Reich (1933–45). Berlin in the 1920s was the third largest municipality in the world. After World War II, the city became divided into East Berlin -- the capital of East Germany -- and West Berlin, a West German exclave surrounded by the Berlin Wall from 1961–89. Following German reunification in 1990, the city regained its status as the capital of Germany, hosting 147 foreign embassies.'
CONFIDENCE = '0.5'
SUPPORT = '120'
REQUEST = BASE_URL.format(
    text=urllib.parse.quote_plus(TEXT), 
    confidence=CONFIDENCE, 
    support=SUPPORT
)
HEADERS = {'Accept': 'application/json'}
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
all_urls = []

r = requests.get(url=REQUEST, headers=HEADERS)
response = r.json()
resources = response['Resources']

for res in resources:
    all_urls.append(res['@URI'])

for url in all_urls:
    sparql.setQuery("""
        SELECT * WHERE {<"""
             +url+
            """>skos:broader|dct:subject ?resource 
            }
    """)

    sparql.setReturnFormat(JSON)
    results = sparql.query().convert()

    for result in results["results"]["bindings"]:
        print('resource ---- ', result['resource']['value'])

如果需要,我很乐意提供更多示例。


您似乎正在尝试检索与给定段落相关的维基百科类别。

小建议

首先,我建议您执行单个请求,将 DBpedia Spotlight 结果收集到VALUES https://www.w3.org/TR/sparql11-query/#inline-data,例如,这样:

values = '(<{0}>)'.format('>) (<'.join(all_urls))

其次,如果你谈论的是主题等级制度,你应该使用SPARQL 1.1属性路径 https://www.w3.org/TR/sparql11-query/#propertypaths.

这两个建议有些不相容。当查询包含多个起点(即VALUES)和任意长度的路径(即* and +运营商)。

下面我使用的是dct:subject/skos:broader属性路径,即检索“下一级”类别。

方法一

第一种方法是根据资源的普遍受欢迎程度对资源进行排序,例如。 G。他们的PageRank http://people.aifb.kit.edu/ath/#DBpedia_PageRank:

values = '(<{0}>)'.format('>) (<'.join(all_urls))

sparql.setQuery(
    """PREFIX vrank:<http://purl.org/voc/vrank#>
       SELECT DISTINCT ?resource ?rank
       FROM <http://dbpedia.org> 
       FROM <http://people.aifb.kit.edu/ath/#DBpedia_PageRank>
       WHERE {
           VALUES (?s) {""" + values + 
    """    }
       ?s dct:subject/skos:broader ?resource .
       ?resource vrank:hasRank/vrank:rankValue ?rank.
       } ORDER BY DESC(?rank)
         LIMIT 10
    """)

结果是:

dbc:Member_states_of_the_United_Nations
dbc:Country_subdivisions_of_Europe
dbc:Republics
dbc:Demography
dbc:Population
dbc:Countries_in_Europe
dbc:Third-level_administrative_country_subdivisions
dbc:International_law
dbc:Former_countries_in_Europe
dbc:History_of_the_Soviet_Union_and_Soviet_Russia

方法2

第二种方法是计算给定文本的类别频率......

values = '(<{0}>)'.format('>) (<'.join(all_urls))

sparql.setQuery(
    """SELECT ?resource count(?resource) AS ?count WHERE {
           VALUES (?s) {""" + values + 
    """    }
       ?s dct:subject ?resource
       } GROUP BY ?resource
         # https://github.com/openlink/virtuoso-opensource/issues/254
         HAVING (count(?resource) > 1)
         ORDER BY DESC(count(?resource))
         LIMIT 10
    """)

结果是:

dbc:Wars_by_country
dbc:Wars_involving_the_states_and_peoples_of_Europe
dbc:Wars_involving_the_states_and_peoples_of_Asia
dbc:Wars_involving_the_states_and_peoples_of_North_America
dbc:20th_century_in_Germany
dbc:Modern_history_of_Germany
dbc:Wars_involving_the_Balkans
dbc:Decades_in_Germany
dbc:Modern_Europe
dbc:Wars_involving_the_states_and_peoples_of_South_America

With dct:subject代替dct:subject/skos:broader,结果更好:

dbc:Former_polities_of_the_Cold_War
dbc:Former_republics
dbc:States_and_territories_established_in_1949
dbc:20th_century_in_Germany_by_period
dbc:1930s_in_Germany
dbc:Modern_history_of_Germany
dbc:1990_disestablishments_in_West_Germany
dbc:1933_disestablishments_in_Germany
dbc:1949_establishments_in_West_Germany
dbc:1949_establishments_in_Germany

结论

结果不太好。我认为有两个原因:DBpedia 类别相当随意,工具相当原始。结合方法1和方法2也许可以取得更好的结果。无论如何,需要用大语料库进行实验。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 DBpedia 属性构建主题层次结构? 的相关文章

  • 从动词列表中检索动词

    我有一个全是动词的字符串列表 我需要获取每个动词的词频 但我想将 想要 想要 想要 和 想要 等动词计为一个动词 形式上 动词 被定义为 4 个单词的集合 其形式为 X Xs Xed Xing 或形式为 X Xes Xed Xing 其中
  • 如何使用 SPARQL 区分事物和无生命物体

    使用 SPARQL 我可以很轻松地获取有关某些资源的所有相关信息 但我很难弄清楚如何真正区分事物和资源things 其中Thing是所有类的超类 是无生命的物体 例如杯子 勺子 铅笔等 例如 下面是 DBPedia 中的一些无生命物体 Fo
  • Python 3 和 NLTK 与 WordNet 2.1 - 这可能吗?

    我将 Python 3 和 NLTK 3 0 0 与 WordNet 3 0 结合使用 我想用该数据 semval2007 https github com alvations pywsd tree master pywsd data se
  • 木槌的基本用法。第一步

    我正在尝试使用Mallet实际上没有主题建模等方面的经验 我的目的是获得N的主题M我现在拥有的文档 用一个或多个主题对每个文档进行分类 文档 1 主题 1 文档 2 主题 2 可能还有主题 3 并用此结果对将来的新文档进行分类 我尝试使用b
  • 如何建立rdfa lite节点之间的关系

    尝试在语义上标记有关特定地址的报告页面 该页面提供有关地址能源消耗的报告 并提供与能源消耗相关的服务优惠 我想在语义上表示该地点的地址 与该地址相关的能源报告以及该地址可用的优惠 现在 我的标记有一个用于地点的 RDFa lite 节点和另
  • RDF、RDFa、微格式和微数据之间有什么关系

    我已经做了很多研究 但我无法理解这 3 者之间的确切关系 另外 既然 W3C 已经正式认可 RDFa 考虑到它与 Microdata 的功能等相匹配 您会推荐它而不是 Microdata 吗 我无法想象你会发现什么如此令人困惑讽刺 gt 编
  • IOB 准确度和精密度之间的差异

    我正在使用命名实体识别和分块器对 NLTK 进行一些工作 我使用重新训练了分类器nltk chunk named entity py为此 我采取了以下措施 ChunkParse score IOB Accuracy 96 5 Precisi
  • SpaCy 的相似度是如何计算的?

    初学者 NLP 问题在这里 similarity 方法如何运作 哇 spaCy 太棒了 它的tfidf模型可以更容易预处理 但w2v只有一行代码 token vector 惊人的 In his spaCy 上的 10 行教程 https g
  • Blenderbot 微调

    我一直在尝试微调 HuggingFace 的对话模型 Blendebot 我已经尝试过官方拥抱脸网站上给出的传统方法 该方法要求我们使用 trainer train 方法来完成此操作 我使用 compile 方法尝试了它 我尝试过使用 Py
  • 生成易于记忆的随机标识符

    与所有开发人员一样 我们在日常工作中不断处理某种标识符 大多数时候 它与错误或支持票有关 我们的软件在检测到错误后 会创建一个包 该包的名称由时间戳和版本号格式化 这是创建合理唯一标识符以避免混淆包的一种廉价方法 例子 错误报告 20101
  • 如何确保用户只提交英文文本

    我正在构建一个涉及自然语言处理的项目 由于nlp模块目前只处理英文文本 所以我必须确保用户提交的内容 不长 只有几个单词 是英文的 是否有既定的方法来实现这一目标 首选 Python 或 Javascript 方式 如果内容足够长我会推荐一
  • Node2vec 的工作原理

    我一直在读关于node2vec https cs stanford edu jure pubs node2vec kdd16 pdf嵌入算法 我有点困惑它是如何工作的 作为参考 node2vec 由 p 和 q 参数化 并通过模拟来自节点的
  • NLTK 中的无监督 HMM 训练

    我只是想进行非常简单的无监督 HMM 训练nltk http www nltk org 考虑 import nltk trainer nltk tag hmm HiddenMarkovModelTrainer from nltk corpu
  • SpaCy 模型“en_core_web_sm”的词汇量大小

    我尝试在 SpaCy 小模型中查看词汇量 model name en core web sm nlpp spacy load model name len list nlpp vocab strings 只给了我 1185 个单词 我也在同
  • ANEW 字典可以用于 Quanteda 中的情感分析吗?

    我正在尝试找到一种方法来实施英语单词情感规范 荷兰语 以便使用 Quanteda 进行纵向情感分析 我最终想要的是每年的 平均情绪 以显示任何纵向趋势 在数据集中 所有单词均由 64 名编码员按照 7 分李克特量表在四个类别上进行评分 这提
  • AttributeError:类型对象“Word2Vec”没有属性“load_word2vec_format”

    我正在尝试实现 word2vec 模型并收到属性错误 AttributeError 类型对象 Word2Vec 没有属性 load word2vec format 下面是代码 wv Word2Vec load word2vec format
  • SpaCy 中的自定义句子边界检测

    我正在尝试在 spaCy 中编写一个自定义句子分段器 它将整个文档作为单个句子返回 我编写了一个自定义管道组件 它使用以下代码来执行此操作here https github com explosion spaCy issues 1850 但
  • 保存具有自定义前向功能的 Bert 模型并将其置于 Huggingface 上

    我创建了自己的 BertClassifier 模型 从预训练开始 然后添加由不同层组成的我自己的分类头 微调后 我想使用 model save pretrained 保存模型 但是当我打印它并从预训练上传时 我看不到我的分类器头 代码如下
  • 如何在Python中使用多处理来加速循环执行

    我有两个清单 列表 A 包含 500 个单词 列表 B 包含 10000 个单词 我正在尝试为列表 A 找到与 B 相关的相似单词 我正在使用 Spacy 的相似函数 我面临的问题是计算需要很长时间 我是多处理使用的新手 因此请求帮助 如何
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt

随机推荐

  • 为什么输入错误值后输出是三行消息而不是一行?

    输入的代码是 import java io IOException public class A public void fn throws IOException char ch do System out println Press C
  • 由于 MIME 类型不匹配,IE9 脚本响应被阻止

    我使用以下代码片段将 google fusion 表中的数据加载为 json var fileref document createElement script fileref setAttribute type text javascri
  • Visual Studio 2010 中的文本覆盖

    这里真的很愚蠢的问题 在 Visual Studio 2010 中 文本光标已从闪烁的线更改为字符周围闪烁的灰色框 当我输入时会覆盖前面的文本 我不知道如何去掉这个 这就像当您在 Microsoft Word 中按插入键并打开覆盖模式时会发
  • 证书验证失败:证书已过期 (_ssl.c:1108)

    当尝试运行我的 Discord 机器人时 我收到此错误 raise ClientConnectorCertificateError aiohttp client exceptions ClientConnectorCertificateEr
  • 如何在 Windows 启动时启动 python 文件?

    我有一个 python 文件并且正在运行该文件 如果 Windows 关闭并再次启动 我如何在每次 Windows 启动时运行该文件 根据脚本正在执行的操作 您可以 将其打包成服务 然后安装该服务 将其添加到 Windows 注册表 HKC
  • 我想在启动画面中播放lottie动画React Native

    在 React Native 中 在应用程序启动之前 我们可以看到白屏 我想在单击应用程序图标时立即加载启动屏幕 我想避免白色背景 Using 反应本机启动画面 https github com crazycodeboy react nat
  • 使用远程 couchbase 和 AWS ec2 时超时

    出于开发目的 我想将本地计算机连接到安装在远程 ec2 上的 couchbase 我成功建立连接 但当我尝试访问数据时出现超时 我搜索了问题并发现here https stackoverflow com questions 12117746
  • Java 的 varargs 性能

    编码 我来检查 Java 的 vararg 性能 我编写以下测试代码 public class T public static void main String args int n 100000000 String s1 new Stri
  • PHP 全局常量是一种良好的现代开发实践吗?

    我正在开发一个具有相当大的 PHP 代码库的新项目 该应用程序使用了相当多的 PHP 常量 define FOO bar 特别是对于数据库连接参数之类的事情 这些常量都定义在一个配置文件中 该文件是require once 基本上应用程序中
  • 连接两个时间序列的最有效方法

    想象一下我有一张这样的表 CREATE TABLE time series snapshot date DATE sales INTEGER PRIMARY KEY snapshot date 具有这样的值 INSERT INTO time
  • 运行查询时“不支持使用USE语句在数据库之间切换”

    尝试使用以下命令选择数据库时出现以下错误php s标准mssql select db功能 USE statement is not supported to switch between databases Use a new connec
  • Linux内核设备驱动程序以DMA方式进入内核空间

    LDD3 p 453 演示dma map single使用作为参数传入的缓冲区 bus addr dma map single dev gt pci dev gt dev buffer count dev gt dma dir Q1 这个缓
  • 装箱/拆箱和可为空?

    我知道装箱和拆箱是关于强制转换 真实类型到对象 对象到真实类型 但我不明白 MSDN 对 Nullable 的说法 这是我不明白的文字 当可空类型被装箱时 公共语言运行时会自动装箱 Nullable 对象的基础值 而不是 Nullable
  • 无法读取未定义的属性“client_secret”

    我尝试按照 Node js 的说明创建一个示例程序https developers google com google apps activity v1 quickstart nodejs https developers google c
  • 无法将 Json 解析为 NSDictionary

    我有一个 Web 服务 它返回以下 Json String password 1234 user andreas 我调用网络服务并尝试解析返回的数据 例如 NSURLConnection sendAsynchronousRequest re
  • 找不到模块:无法解析“F:\React\react-complete-guide\src\Component”中的“../axios”

    我在我的中遇到这个编译错误React我尝试发送的项目GET要求 src Component Form js Module not found Can t resolve axios in F React react complete gui
  • 是一个PrintWriter和BufferedWriter

    基本上我想知道 PrintWriter 是否是缓冲写入器 我见过这样的代码PrintWriter pw new PrintWriter new BufferedWriter new FileWriter file 然而从这个javadoc
  • 如何用C语言制作ppm文件的黑白图片?

    嘿 我的代码需要一些帮助 我读取了 ppm 文件 将颜色更改为黑色和白色 并希望将其保存到新文件中 我可以读取文件的标题并将其写入新文件 但我在更改颜色方面遇到了困难 我知道我可以用以下公式得到灰度值 0 299 红色分量 0 587 绿色
  • 从不同文件夹压缩文件,保留目录结构

    我编写了一些非常有趣的代码来压缩多个文件和文件夹 该脚本将采用参数列表 文件和文件夹 并将它们压缩为以日期 时间作为名称的 zip 所以我需要一些在参数是文件时执行的代码 该代码应将文件的目录结构添加到 zip 文件中 THE SCRIPT
  • 如何使用 DBpedia 属性构建主题层次结构?

    我试图通过遵循下面提到的两个 DBpedia 属性来构建主题层次结构 skos 更广泛的财产 dcterms 主题属性 我的目的是给这个词确定它的主题 例如 给出这个词 支持向量机 我想从中识别主题 例如分类算法 机器学习等 然而 有时我对