解析大型NTriples文件的Python方法
我正在尝试用代码解析一个比较大的NTriples文件,代码来源于在Python中解析大型RDF。
我安装了raptor和Python的redland-bindings。
import RDF
parser=RDF.Parser(name="ntriples") #as name for parser you can use ntriples, turtle, rdfxml, ...
model=RDF.Model()
stream=parser.parse_into_model(model,"file:./mybigfile.nt")
for triple in model:
print triple.subject, triple.predicate, triple.object
但是程序卡住了,我怀疑它可能是试图把整个文件加载到内存中,因为它没有立即开始运行。
有没有人知道该怎么解决这个问题?
1 个回答
2
之所以慢,是因为你在读取一个内存中的存储(默认是RDF.Model()),这个存储没有索引。所以它会越来越慢。N-Triples的解析是从文件中流式读取的,它不会一次性把所有内容都放到内存里。
你可以查看一下Redland存储模块的文档,了解一下存储模型的概况。在这里,你可能想要使用存储类型为type
的'hashes',以及hash-type
为内存。
s = RDF.HashStorage("abc", options="hash-type='memory'")
model = RDF.Model(s)
(未测试)