我有一个程序可以创建 rdf 三元组的多个文本文件。我需要比较三元组并快速完成,最好的方法是什么?我想过将三元组放入一个数组中并进行比较,但每个文件可能有数十万个三元组,而这将需要很长时间。我需要它尽可能接近实时,因为三元组将在文件中不断地被分类。任何帮助都会很棒。如果可以更轻松地以某种方式比较它们,这些文件也位于 AllegroGraph 存储库中。
一个想法:如果我将三元组存储在 Excel 中(每行一个三元组)并且每个存储库一张表,
A:我怎样才能找到工作表中的重复项。 B:会很快吗? C:我如何从 Java 中实现自动化?
最佳答案
您需要构建一个主索引,用于存储每个三元组及其出现的文件数量以及每个文件中三元组的确切文件名和位置。您可以搜索主索引以实时回答查询。
当您更新、删除或创建新的 rdf 文件时,您需要更新主索引。
您需要存储主索引,以便可以有效地更新和搜索。
简单的选择可能是使用关系数据库(如MySql)来存储主索引。它可以回答您的查询,例如使用简单的 select 语句 select * from rdfindex where Triplecount > 2 查找常见三元组。
编辑:您无法使用 HashMap 或类似的数据结构在内存中存储数十万个三元组。这就是为什么我建议使用数据库,它可以存储数据并有效地响应您的查询。您可以查看像 SQLite 这样的嵌入式数据库来存储数据。
阅读这些主题
How to create SQLite database and create tables, access tables etc.,创建一个简单的表来存储三重、三重计数、文件名。
将所有 Excel 文件转换为 CSV 文件。您可以使用opencsv用 Java 解析文件(查看 opencsv 附带的示例)。
解析 CSV 文件并将数据加载到 SQLite 中。如果该三元组已在数据库中,则只需更新计数,如果没有则插入该三元组。
关于java - 使用java查找多个文本文件的共同元素的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11246097/