【问题标题】:How to count each word in an external webpage?如何计算外部网页中的每个单词?
【发布时间】:2017-06-29 05:03:45
【问题描述】:

这可能是一个简单的修复,但我无法弄清楚。基本上我正在打开一个外部网页,我想将该网页上的每个单词(只是没有标签的单词或其他任何单词)存储到一个数组中,这样我就可以输出每个单词在页面上出现的次数。

这是我用来测试的外部页面:

<html>
<body>
<p> Hello world! <br/>
    <a href = ”link.html”> Click <b> here </b> </a>
    <br/> Goodbye world!
</p>
</body>
</html>

我的输出是这样的:

点击:1 次 再见世界!:1次, Hello world!:1 次, 这里:1次

我很近,我只需要“再见世界!”和“你好世界!”在空间分裂,但我找不到办法。

这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        var w;

        function openFile(url) {
            w = window.open();
            w.location = url;
        }

        var mainArray = [];
        var pre;
        function retrieveText() {
            pre = document.getElementById("count");
            getwords(w.document.body);
            count();
        }

        function count() {

            mainArray.sort();

            var current = null;
            var cnt = 0;
            for (var i = 0; i < mainArray.length; i++) {
                if (mainArray[i] != current) {
                    if (cnt > 0) {
                        document.write(current + ' : ' + cnt + ' times<br>');
                    }
                    current = mainArray[i];
                    cnt = 1;
                } else {
                    cnt++;
                }
            }
            if (cnt > 0) {
                document.write(current + ' : ' + cnt + ' times');
            }

        }

        function getwords(node) {
            mainArray = w.document.body.innerHTML.replace(/^\s*<[^>]*>\s*|\s*<[^>]*>\s*$|>\s*</g,' ').split(/<[^>]*>/g);
        }

    </script>
</head>
<body>
<p>Filename: <input id = "url" name="url" size=15 type="Text"/></p>
<a href="javascript:openFile(document.getElementById('url').value)">
    Open document</a>
</br>
<a href="javascript:retrieveText()">Retrieve text</a><br/>
</br>
<ul id ="arrlist"></ul>

</body>
</html>

【问题讨论】:

    标签: javascript html arrays dom web-applications


    【解决方案1】:

    我建议不要使用正则表达式来删除标签 - 可能很难解析任何可能的 HTML。将您的 getwords() 函数替换为:

    function getwords(node) {
        mainArray = node.innerText.replace(/\s+/g, ",").split(",");
    }
    

    ma​​inArray 中,您也可以获取空值,但如果需要,可以轻松删除它们。

    我现在明白了:

    Click : 1 times
    Goodbye : 1 times
    Hello : 1 times
    here : 1 times
    world! : 2 times
    

    【讨论】:

    • 我只是像你说的那样更改了 getwords(),现在 mainArray 对我来说看起来像这样:["[object", "HTMLBodyElement]"]
    • 我尝试了一个小修改示例,因为我的 Chrome 不允许读取本地文件。对于您的情况,请尝试仅使用一行函数: mainArray = node.innerText.replace(/\s+/g, ",").split(",");
    • 成功了!谢谢我的朋友 :) 你能编辑你发布的答案,以便我可以将其标记为已解决吗?
    猜你喜欢
    • 2021-10-07
    • 2018-02-26
    • 1970-01-01
    • 2013-10-18
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多