更新电子邮件关键字的最佳结构是什么?

时间:2014-11-21 13:37:49

标签: java file-io text-files

我必须阅读特定用户的电子邮件。目前我正在阅读电子邮件,删除所有的噪音词,只是获取关键字并将这些关键字写入文本文件user001.txt。我读的电子邮件越多,文本文件就越大。然后我阅读user001.txt并获得该用户最常用的10个单词。

因为文件可能会变得非常大,我以为我会写一个单词和出现{apple}{3}的文件。然后对于后续的电子邮件,我将不得不阅读user001.txt,例如,如果单词apple在后续电子邮件中出现5次,我将不得不将文本文件中的apple增加5,因此它现在将显示为{apple}{8} 。这个特殊问题的最佳结构是什么?

整体上解决这个问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

只是因为您分析邮件并在邮件中写出apple 3,这并不意味着您需要更新邮件,您可以添加后续行apple 5和{{1}偶尔(可能是一个cron作业)你可以浏览文件并将它们合并到apple 2

这种技术也被几个NoSQL数据库使用。因为附加信息和存储更容易,更快,通常非常便宜。然后,只要数据库,计算机,服务器......处于低负载且不影响性能,就可以运行优化存储和删除未使用数据的操作。

答案 1 :(得分:0)

我不知道这是最好的方法 - 甚至是一个好方法,但我会说一个好的“数据结构”可以通过相对较快的速度阅读将是一个简单的列表。文件看起来像这样:

apple: 3
chrome: 4
explorer: 0

然后可以使用例如一行逐行读取该文件。一个BufferedReader。每一行都有一个关键字和相应的值。

检查一行是否与您使用的关键字匹配

String key = "apple" // your key here
String line = ...    // the line to check here
boolean matches = line.startsWith(key + ":");
int currentValue = Integer.parseInt(line.split(":")[1].trim());

找到匹配的行后,您可以使用上面的代码读取其值,将新计数添加到该行并将其存储回文件。 关于高效编辑/阅读大文件的主题,我相信你会通过谷歌找到很多资料。

答案 2 :(得分:0)

我认为您可能需要维护特定格式的数据文件。 对于例如Apple,5 ...... 因此,每次启动应用程序时,只需将文件中的整个数据加载到Map中即可。然后,您可以更新Map中现有字符串的数量,甚至可以将其他字符串添加到Map中。然后,您只需将内容写入数据文件。