当前位置: 首页 > 知识库问答 >
问题:

如何检查单词所在的文本行

喻高寒
2023-03-14

我正在做一个练习,我需要计算一个单词在文本中出现的次数,我还需要打印单词出现在哪一行。

文本示例:

法律规定,法律规定,法律规定,法律规定,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的,法律规定的。

这是我查找和计数每个单词的方法:

public void findWords() {
    try {
        File myObj = new File("path\\text.txt");
        Scanner myReader = new Scanner(myObj);
        while (myReader.hasNextLine()) {
            String text = myReader.nextLine();
            final String lowerText = text.toLowerCase();
            final String[] split = lowerText.split("\\W+");
            System.out.println("Output: ");
            for (String s : split) {
                if (s == null) {
                    continue;
                }
                int count = 0;
                for (int i = 0; i < split.length; i++) {
                    final boolean sameWorld = s.equals(split[i]);
                    if (sameWorld) {
                        count = count + 1;
                        split[i] = null;
                    }
                }
                System.out.println(s + " " + count);
            }
        }
        myReader.close();
    } catch (FileNotFoundException e) {
        System.out.println(e);
    }
}

电流输出如下:

Output:
lorem 1
ipsum 1
dolor 1
sit 1
amet 1
consectetur 1
adipiscing 1
....

我想让它显示这个词在哪一行是这样的:

Output:
lorem 1 - line 1
ipsum 1 - line 1
...

为了更清楚,单词“ut”在两行中出现了3次,输出应如下所示:

 ut 3 - line 1 2

共有2个答案

许安邦
2023-03-14

好吧,如果你被允许使用地图,这就是如何做到的。在我看来,非常熟悉并熟悉如何以及何时使用List、HashMap(又名字典)和HashSet(通常是组合使用)是编程中最基本的技能之一。

public class SO {
    public static void main(String[] args) throws Exception {
        Map<String, Integer> wordToCount = new HashMap<>();
        Map<String, Set<Integer>> wordToLines = new HashMap<>();

        File myObj = new File("path\\text.txt");
        Scanner myReader = new Scanner(myObj);
        int lineNumber = 0;
        while (myReader.hasNextLine()) {
            lineNumber++;
            String text = myReader.nextLine();
            if (text.isBlank()) {
                continue;
            }
            final String lowerText = text.toLowerCase();
            final String[] split = lowerText.split("\\W+");
            for (String word : split) {
                Integer count = wordToCount.get(word);
                if (count == null) {
                    count = 0;
                }
                wordToCount.put(word, count + 1);

                Set<Integer> lines = wordToLines.get(word);
                if (lines == null) {
                    lines = new TreeSet<>();
                    wordToLines.put(word, lines);
                }
                lines.add(lineNumber);
            }
        }
        myReader.close();

        for (String word : wordToCount.keySet()) {
            Set<Integer> lines = wordToLines.get(word);
            List<String> linesStrings = lines.stream().map(String::valueOf).toList();
            String linesStr = String.join(", ", linesStrings);
            int wordCount = wordToCount.get(word);
            System.out.printf("%-20s %-3d %s\n", word, wordCount, linesStr);
        }
    }
}
于嘉许
2023-03-14

是否可以创建一个对象来处理这个词。它可以有一个字符串来表示单词的文本,一个int数组来表示单词出现的行,然后一个int表示单词在文本中出现的频率。至于跟踪这条线,你可以在while循环中使用一个计数器变量来跟踪你所在的这条线?

如果你这样做的话,最好使用hashmap和treeset来存储word对象,然后根据某种顺序将它们打印出来。

 类似资料:
  • 问题内容: 我试图加快我的项目以计算单词频率的速度。我有360多个文本文件,我需要获取单词的总数以及另一个单词列表中每个单词出现的次数。我知道如何使用单个文本文件执行此操作。 要获得“通货膨胀”,“工作”,“产出”个体的频率过于繁琐。我可以将这些单词放入列表中并同时查找列表中所有单词的出现频率吗?基本上,这与Python。 示例:代替此: 我想这样做(我知道这不是真实的代码,这是我在寻求帮助的内容

  • 问题内容: 我想检查Python程序中英语词典中是否有单词。 我相信可能会采用nltk wordnet接口,但是我不知道如何将其用于如此简单的任务。 将来,我可能想检查单词的单数形式是否在字典中(例如,属性->属性->英语单词)。我将如何实现? 问题答案: 要获得更大的功能和灵活性,请使用专用的拼写检查库,例如。有一个教程,或者您可以直接学习: 带有一些词典(en_GB,en_US,de_DE,f

  • 我是新来的,我想要得到一个文本文件的单词列表和单词数。这是我尝试过的代码: 输出:century Cepheus CEQ陶瓷Cerberus谷类小脑错误文件字数:0

  • 问题内容: 我在MySql DB的一个表中有一个文本列。我想获取在文本列中具有特定单词的所有记录。例如: 在这种情况下,当搜索“ cto”时,我希望查询返回记录1,2,3,4,而不是5。 有任何想法吗? ps我希望它不区分大小写 问题答案: 您可能希望根据全文索引使用全文索引。否则,您可以使用REGEXP来指定正则表达式来搜索单词。您应该看到此问题(和答案),以了解如何使用REGEXP查找单词。

  • 例如 我可以用什么函数在laravel中解决这个问题?

  • 我是 PyCharm(和 Python)的新手,但找不到一种方法在我的 PyCharm 项目中的所有文件中完整搜索单词。每次我做编辑—— 当我选择查找用法时,它告诉我将插入符号定位到一个特定的单词。