Hashmap 单键持有 class。计算密钥并检索计数器
Hashmap single key holding a class. count the key and retrieve counter
我正在做一个数据库自主项目。我有一个输入文件来自:http://ir.dcs.gla.ac.uk/resources/test_collections/cran/
处理成1400个独立文件后,每个文件命名为00001.txt,...01400.txt.. .) 在对它们应用 Stemming 之后,我会将它们单独存储在一个特定的文件夹中,我们称之为 StemmedFolder 格式如下:
在 StemmedFolder: 00001.txt 包括:
investig
aerodynam
wing
slipstream
brenckman
experiment
investig
aerodynam
wing
在 StemmedFolder 中: 00756.txt 包括:
remark
eddi
viscos
compress
mix
flow
lu
ting
等等....
我写的代码是:
- 获取 StemmedFolder,计算唯一字数
- 按字母顺序排序
- 添加文档的 ID
- 将每个保存到一个新文件 00001.txt 到 01400.txt 如下所述
{我可以为这 4 个部分提供我的代码,以防有人需要查看实施、更改或任何编辑情况}
每个文件的输出结果将生成一个单独的文件。 (1400,每个命名为 00001.txt,00002.txt...)在一个特定的文件夹中让我们称之为 FrequenceyFolder 格式如下:
在 FrequenceyFolder: 00001.txt 包括:
00001,aerodynam,2
00001,agre,3
00001,angl,1
00001,attack,7
00001,basi,4
....
在 FrequenceyFolder: 00999.txt 包括:
00999,aerodynam,5
00999,evalu,1
00999,lift,3
00999,ratio,2
00999,result,9
....
在 FrequenceyFolder: 01400.txt 包括:
01400,subtract,1
01400,support,1
01400,theoret,1
01400,theori,1
01400,.....
______________
现在我的问题:
我需要再次合并这1400个文件,通过一些计算输出一个类似这种格式的txt文件:
'aerodynam' totalFrequency=3docs: [[Doc_00001,5],[Doc_01344,4],[Doc_00123,3]]
'book' totalFrequncy=2docs: [[Doc_00562,6],[Doc_01111,1]
....
....
'result' totalFrequency=1doc: [[Doc_00010,5]]
....
....
'zzzz' totalFrequency=1doc: [[Doc_01235,1]]
感谢您花时间阅读这么长的内容post
您可以使用 Map
个 List
。
Map<String,List<FileInformation>> statistics = new HashMap<>()
在上面的映射中,键将是单词,值将是一个 List<FileInformation>
对象,描述包含该单词的单个文件的统计信息。 FileInformation
class 可以声明如下:
class FileInformation {
int occurrenceCount;
String fileName;
//getters and setters
}
要填充上面的地图,请使用以下步骤:
- 读取
FrequencyFolder
中的每个文件
- 当你第一次遇到一个词时,把它作为关键字放在
Map
中。
- 创建一个
FileInformation
对象并将 occurrenceCount
设置为找到的出现次数并将 fileName
设置为在其中找到它的文件的名称。将此对象添加到List<FileInformation>
对应于步骤 2 中创建的密钥。
- 下次您在另一个文件中遇到同一个词时,创建一个新的
FileInfomation
对象并将其添加到对应于该词在映射中的条目的 List<FileInformation>
。
填充 Map
后,打印统计数据应该是小菜一碟。
for(String word : statistics.keySet()) {
List<FileInformation> fileInfos = statistics.get(word);
for(FileInformation fileInfo : fileInfos) {
//sum up the occureneceCount for the word to get the total frequency
}
}
我正在做一个数据库自主项目。我有一个输入文件来自:http://ir.dcs.gla.ac.uk/resources/test_collections/cran/
处理成1400个独立文件后,每个文件命名为00001.txt,...01400.txt.. .) 在对它们应用 Stemming 之后,我会将它们单独存储在一个特定的文件夹中,我们称之为 StemmedFolder 格式如下:
在 StemmedFolder: 00001.txt 包括:
investig
aerodynam
wing
slipstream
brenckman
experiment
investig
aerodynam
wing
在 StemmedFolder 中: 00756.txt 包括:
remark
eddi
viscos
compress
mix
flow
lu
ting
等等....
我写的代码是:
- 获取 StemmedFolder,计算唯一字数
- 按字母顺序排序
- 添加文档的 ID
- 将每个保存到一个新文件 00001.txt 到 01400.txt 如下所述
{我可以为这 4 个部分提供我的代码,以防有人需要查看实施、更改或任何编辑情况}
每个文件的输出结果将生成一个单独的文件。 (1400,每个命名为 00001.txt,00002.txt...)在一个特定的文件夹中让我们称之为 FrequenceyFolder 格式如下:
在 FrequenceyFolder: 00001.txt 包括:
00001,aerodynam,2
00001,agre,3
00001,angl,1
00001,attack,7
00001,basi,4
....
在 FrequenceyFolder: 00999.txt 包括:
00999,aerodynam,5
00999,evalu,1
00999,lift,3
00999,ratio,2
00999,result,9
....
在 FrequenceyFolder: 01400.txt 包括:
01400,subtract,1
01400,support,1
01400,theoret,1
01400,theori,1
01400,.....
______________
现在我的问题:
我需要再次合并这1400个文件,通过一些计算输出一个类似这种格式的txt文件:
'aerodynam' totalFrequency=3docs: [[Doc_00001,5],[Doc_01344,4],[Doc_00123,3]]
'book' totalFrequncy=2docs: [[Doc_00562,6],[Doc_01111,1]
....
....
'result' totalFrequency=1doc: [[Doc_00010,5]]
....
....
'zzzz' totalFrequency=1doc: [[Doc_01235,1]]
感谢您花时间阅读这么长的内容post
您可以使用 Map
个 List
。
Map<String,List<FileInformation>> statistics = new HashMap<>()
在上面的映射中,键将是单词,值将是一个 List<FileInformation>
对象,描述包含该单词的单个文件的统计信息。 FileInformation
class 可以声明如下:
class FileInformation {
int occurrenceCount;
String fileName;
//getters and setters
}
要填充上面的地图,请使用以下步骤:
- 读取
FrequencyFolder
中的每个文件
- 当你第一次遇到一个词时,把它作为关键字放在
Map
中。 - 创建一个
FileInformation
对象并将occurrenceCount
设置为找到的出现次数并将fileName
设置为在其中找到它的文件的名称。将此对象添加到List<FileInformation>
对应于步骤 2 中创建的密钥。 - 下次您在另一个文件中遇到同一个词时,创建一个新的
FileInfomation
对象并将其添加到对应于该词在映射中的条目的List<FileInformation>
。
填充 Map
后,打印统计数据应该是小菜一碟。
for(String word : statistics.keySet()) {
List<FileInformation> fileInfos = statistics.get(word);
for(FileInformation fileInfo : fileInfos) {
//sum up the occureneceCount for the word to get the total frequency
}
}