Zum Hauptinhalt springen
claw
am
tools
Werkzeuge
Dokumente
Daoark
EN
Startseite
Startseite
/
Textwerkzeuge
›
Startseite
manifest.json
= 0x4E00 && c <= 0x9FFF; } function isEnAlpha(c) { return (c >= 65 && c <= 90) || (c >= 97 && c <= 122); } function isDigit(c) { return c >= 48 && c <= 57; } function stats(text) { if (!text) return null; var total = text.length; var noSpace = text.replace(/\s/g, ''); var cn = 0, en = 0, digit = 0, punct = 0, space = 0; for (var i = 0; i < text.length; i++) { var c = text.charAt(i); if (isCjk(c.charCodeAt(0))) cn++; else if (isEnAlpha(c.charCodeAt(0)) || c === "'") en++; else if (isDigit(c.charCodeAt(0))) digit++; else if (/\s/.test(c)) space++; else punct++; } // 词 var enWords = text.match(/[A-Za-z]+(?:['-][A-Za-z]+)*/g) || []; var enWordCount = enWords.length; // 句(中英文)。含 . ! ? ; 。!?; var sentences = text.split(/[.!?;。!?;]+/).filter(function(s) { return s.trim().length > 0; }); var sentenceCount = sentences.length || 1; // 段(空行/换行分组) var paragraphs = text.split(/\n\s*\n/).filter(function(p) { return p.trim().length > 0; }); var paragraphCount = Math.max(paragraphs.length, 1); // 音节 var totalSyllables = enWords.reduce(function(s, w) { return s + countSyllables(w); }, 0); // Flesch Reading Ease = 206.835 - 1.015 (词/句) - 84.6 (音节/词) var flesch = 0; if (enWordCount > 0) { var asl = enWordCount / sentenceCount; var asw = totalSyllables / enWordCount; flesch = 206.835 - 1.015 * asl - 84.6 * asw; } // Flesch-Kincaid Grade = 0.39 (词/句) + 11.8 (音节/词) - 15.59 var fk = 0; if (enWordCount > 0) { var asl2 = enWordCount / sentenceCount; var asw2 = totalSyllables / enWordCount; fk = 0.39 * asl2 + 11.8 * asw2 - 15.59; } // 最长句 var maxSentLen = 0; for (var j = 0; j < sentences.length; j++) { if (sentences[j].trim().length > maxSentLen) maxSentLen = sentences[j].trim().length; } var avgWordLen = enWordCount > 0 ? enWords.reduce(function(s, w) { return s + w.length; }, 0) / enWordCount : 0; var avgSentLen = enWordCount / sentenceCount; return { total: total, noSpace: noSpace.length, cn: cn, en: en, digit: digit, punct: punct, space: space, enWordCount: enWordCount, sentenceCount: sentenceCount, paragraphCount: paragraphCount, syllables: totalSyllables, flesch: flesch, fk: fk, maxSentLen: maxSentLen, avgWordLen: avgWordLen, avgSentLen: avgSentLen }; } function fleschLabel(s) { if (s >= 90) return '非常容易(小学 5 年级)'; if (s >= 80) return '容易(小学 6 年级)'; if (s >= 70) return '较易(中学 7 年级)'; if (s >= 60) return '标准(中学 8-9 年级)'; if (s >= 50) return '较难(高中 10-12 年级)'; if (s >= 30) return '难(大学)'; return '非常难(研究生)'; } function count() { var text = getVal('text-a'); if (!text) { showError('请输入'); return; } var s = stats(text); if (!s) return; var out = '字符统计:\n' + ' 总字符: ' + s.total + ' (含空白 ' + s.space + ')\n' + ' 不含空白: ' + s.noSpace + '\n' + ' 中文字: ' + s.cn + '\n' + ' 英文字母: ' + s.en + '\n' + ' 数字: ' + s.digit + '\n' + ' 标点: ' + s.punct + '\n\n' + '结构统计:\n' + ' 英文词数: ' + s.enWordCount + '\n' + ' 句子数: ' + s.sentenceCount + '\n' + ' 段落数: ' + s.paragraphCount + '\n' + ' 英文音节: ' + s.syllables + '\n\n' + '词句统计:\n' + ' 平均词长: ' + s.avgWordLen.toFixed(2) + ' 字母\n' + ' 平均句长: ' + s.avgSentLen.toFixed(2) + ' 词/句\n' + ' 最长句: ' + s.maxSentLen + ' 字符\n\n' + '可读性(基于英文):\n' + ' Flesch Reading Ease: ' + s.flesch.toFixed(1) + ' / 100 (' + fleschLabel(s.flesch) + ')\n' + ' Flesch-Kincaid Grade: ' + s.fk.toFixed(1) + ' (年级)\n\n' + '字数预算:\n' + ' 推文(280)容纳: ' + (s.noSpace > 280 ? '超' : 'OK') + ' (' + Math.min(280, s.noSpace) + '/280)\n' + ' 小红书(1000)容纳: ' + (s.noSpace > 1000 ? '超' : 'OK') + '\n' + ' 公众号头条(2000)容纳: ' + (s.noSpace > 2000 ? '超' : 'OK'); showResult(out, '总字符 ' + s.total + ', 中文 ' + s.cn + ', 英文词 ' + s.enWordCount); } $('btn-count').addEventListener('click', count); $('btn-clear').addEventListener('click', function() { var inputs = document.querySelectorAll('input,textarea,select'); for (var i = 0; i < inputs.length; i++) inputs[i].value = inputs[i].defaultValue; var ra = $('result-area'); ra.hidden = true; ra.style.display = 'none'; var em = $('error-msg'); em.hidden = true; em.style.display = 'none'; }); var t = null; $('text-a').addEventListener('input', function() { clearTimeout(t); t = setTimeout(count, 400); }); })();