gpt4 book ai didi

python - 如何使用 RDFLib 解析 .ttl 文件?

转载 作者:太空狗 更新时间:2023-10-29 21:40:23 24 4
gpt4 key购买 nike

我有一个 .ttl 格式的文件。它有 4 个属性/列,包含以下形式的四元组:

  1. (id, student_name, student_address, student_phoneno)
  2. (id,faculty_name,faculty_address,faculty_phoneno)

我知道如何使用 RDFLib 解析 .n3 形式的三元组;

from rdflib import Graph
g = Graph()
g.parse("demo.nt", format="nt")

但我不确定如何解析这些四元组。

我的目的是解析和提取与特定 ID 有关的所有信息。学生和教师的 ID 可以相同。

如何使用 RDFLib 处理这些四元组并将其用于基于 id 的聚合?

.ttl 文件中的示例片段:

#@ <id1>
<Alice> <USA> <12345>

#@ <id1>
<Jane> <France> <78900>

最佳答案

TurtleNotation 3 语法的子集,所以 rdflib应该能够使用 format='n3' 解析它。检查 rdflib 是否保留注释(id 在示例的注释 (#...) 中指定)。如果不是,并且输入格式与示例中所示的一样简单,那么您可以手动解析它:

import re
from collections import namedtuple
from itertools import takewhile

Entry = namedtuple('Entry', 'id name address phone')

def get_entries(path):
with open(path) as file:
# an entry starts with `#@` line and ends with a blank line
for line in file:
if line.startswith('#@'):
buf = [line]
buf.extend(takewhile(str.strip, file)) # read until blank line
yield Entry(*re.findall(r'<([^>]+)>', ''.join(buf)))

print("\n".join(map(str, get_entries('example.ttl'))))

输出:

Entry(id='id1', name='Alice', address='USA', phone='12345')
Entry(id='id1', name='Jane', address='France', phone='78900')

将条目保存到数据库:

import sqlite3

with sqlite3.connect('example.db') as conn:
conn.execute('''CREATE TABLE IF NOT EXISTS entries
(id text, name text, address text, phone text)''')
conn.executemany('INSERT INTO entries VALUES (?,?,?,?)',
get_entries('example.ttl'))

如果您需要在 Python 中进行一些后处理,则按 id 分组:

import sqlite3
from itertools import groupby
from operator import itemgetter

with sqlite3.connect('example.db') as c:
rows = c.execute('SELECT * FROM entries ORDER BY id LIMIT ?', (10,))
for id, group in groupby(rows, key=itemgetter(0)):
print("%s:\n\t%s" % (id, "\n\t".join(map(str, group))))

输出:

id1:
('id1', 'Alice', 'USA', '12345')
('id1', 'Jane', 'France', '78900')

关于python - 如何使用 RDFLib 解析 .ttl 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15171802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com