【问题标题】:Index of words found in document - Java在文档中找到的单词索引 - Java
【发布时间】:2013-09-20 19:45:44
【问题描述】:

我正在尝试编写一个程序,该程序将文本文件作为输入,检索单词,并输出每个单词以及它们所在的每个行号。我在这个项目中遇到了很多麻烦,尽管我已经取得了一些进展...

到目前为止,我有一个ArrayList,它包含文档中找到的所有单词,没有标点符号。我可以输出这个列表并查看文本文件中的所有单词,但我不知道从这里去哪里......有什么想法吗?

示例:

myList = [A, ACTUALLY, ALMOST,....]

我需要能够以某种方式将每个单词与它们来自的行相关联,这样我就可以填充一个数据结构,该结构将保存每个单词及其关联的行号。

我是一个编程新手,所以我对所有类型的数据结构和算法不是很熟悉......我的导师建议我使用动态多链表,但我不知道如何实现与 ArrayLists 相比和数组。

任何想法将不胜感激。谢谢!

【问题讨论】:

  • 地图似乎比链表好得多
  • @Cruncher 虽然如果部分作业需要排序,Map 将不起作用。
  • 他在哪里说过排序?
  • Map> 是要走的路。使用 Map 的好处是您可以确保每个单词只存在一个键,而无需遍历您已经拥有的整个单词列表。与每个键相关联的是一个 ArrayList,其中包含找到每个单词的行号。
  • 我宁愿说 Map> - 因为同一个词可能出现在许多不同的行中。

标签: java indexing inverted-index


【解决方案1】:

您应该使用哈希表。哈希表是一个键/值对。键可以是文本文件中的每个单词、值、包含行号的数组列表。

基本上,循环遍历文本文件中的每个单词。如果该单词不在您的单词列表中,请将其作为键和行号作为列表中的值添加到哈希表中。如果该单词已经在表中,则将行号附加到数组列表中。

Java 在哈希表上有很好的文档here

为您获取所需的方法。

【讨论】:

  • +1 跟踪行号的循环计数器似乎也是一个好主意。不过要小心,您需要遍历行,然后是行中的单词,以便跟踪您所在的行。
  • 是的,他必须以某种方式记录下来。自从我用 Java 解析文件以来已经有一段时间了,但我记得你一次可以读一整行。我希望会有一个外部循环一次读取一行并增加行号,然后有一个内部循环来迭代该行中的单词。
猜你喜欢
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2019-02-08
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多