All Tools / Blog / Cara Menghitung Kata, Karakter, dan Baris pada Teks

Cara Menghitung Kata, Karakter, dan Baris pada Teks

4 min read

Menghitung kata terdengar sepele sampai kamu menemui edge case: apakah kata bercetak-hubung dihitung satu atau dua? Apakah URL dihitung? Bagaimana dengan teks dalam beberapa bahasa? Panduan ini mencakup metode penghitungan akurat untuk setiap lingkungan.

Di browser

Tempel teks ke word counter dan dapatkan hitungan instan berupa kata, karakter, karakter tanpa spasi, kalimat, paragraf, dan perkiraan waktu baca. Diperbarui saat kamu mengetik — berguna ketika kamu menulis dengan batas tertentu (thread Twitter/X, aplikasi beasiswa, pengiriman artikel).

Apa yang dihitung sebagai kata?

Definisi standar: rangkaian karakter non-whitespace yang dipisahkan oleh whitespace. Dengan definisi ini:

  • halo dunia → 2 kata
  • well-known → 1 kata (kata bercetak-hubung)
  • C++ → 1 kata
  • https://example.com/path?q=1 → 1 kata
  • "teks dalam kutipan" → 3 kata (tanda baca melekat pada kata yang berdekatan)

Untuk kebanyakan tujuan ini sudah tepat. Jika perlu mengecualikan URL, hapus dulu sebelum menghitung.

JavaScript

Hitung kata dasar:

function wordCount(text) {
    return text.trim().split(/\s+/).filter(Boolean).length;
}

console.log(wordCount("Halo dunia"));         // 2
console.log(wordCount("  spasi   banyak  ")); // 2
console.log(wordCount(""));                   // 0

filter(Boolean) menghapus string kosong yang muncul dari beberapa spasi berturutan atau whitespace di awal/akhir.

Statistik lengkap:

function textStats(text) {
    return {
        characters: text.length,
        charactersNoSpaces: text.replace(/\s/g, '').length,
        words: text.trim() === '' ? 0 : text.trim().split(/\s+/).length,
        sentences: (text.match(/[.!?]+/g) || []).length,
        paragraphs: text.trim() === '' ? 0 : text.trim().split(/\n\s*\n/).length,
        readingTimeMinutes: Math.ceil(text.trim().split(/\s+/).length / 200),
    };
}

const stats = textStats("Halo dunia. Ini adalah tes.\n\nParagraf kedua.");
console.log(stats);
// {
//   characters: 46,
//   charactersNoSpaces: 38,
//   words: 8,
//   sentences: 2,
//   paragraphs: 2,
//   readingTimeMinutes: 1
// }

Waktu baca menggunakan 200 kata per menit (rata-rata membaca teks online yang umum dikutip; 250 kpm untuk buku).

Frekuensi kata (kata mana yang paling sering muncul):

function wordFrequency(text) {
    const words = text.toLowerCase().match(/\b[a-z']+\b/g) || [];
    return words.reduce((freq, word) => {
        freq[word] = (freq[word] || 0) + 1;
        return freq;
    }, {});
}

const freq = wordFrequency("the cat sat on the mat the cat");
const sorted = Object.entries(freq).sort((a, b) => b[1] - a[1]);
console.log(sorted);
// [['the', 3], ['cat', 2], ['sat', 1], ['on', 1], ['mat', 1]]

Python

Hitung kata dan karakter:

def text_stats(text: str) -> dict:
    words = text.split()
    sentences = len([s for s in text.replace('!', '.').replace('?', '.').split('.') if s.strip()])
    paragraphs = len([p for p in text.strip().split('\n\n') if p.strip()])

    return {
        'characters': len(text),
        'characters_no_spaces': len(text.replace(' ', '')),
        'words': len(words),
        'sentences': sentences,
        'paragraphs': paragraphs,
        'reading_time_minutes': max(1, len(words) // 200),
    }

sample = "Halo dunia. Ini adalah tes.\n\nParagraf kedua di sini."
print(text_stats(sample))

Hitung kata dalam file:

def count_words_in_file(filepath: str) -> dict:
    with open(filepath, encoding='utf-8') as f:
        text = f.read()
    return text_stats(text)

print(count_words_in_file('esai.txt'))

Frekuensi kata:

from collections import Counter
import re

def word_frequency(text: str, top_n: int = 10) -> list[tuple[str, int]]:
    words = re.findall(r"\b[a-z']+\b", text.lower())
    return Counter(words).most_common(top_n)

sample = "the cat sat on the mat the cat"
print(word_frequency(sample))
# [('the', 3), ('cat', 2), ('sat', 1), ('on', 1), ('mat', 1)]

Command line

Linux/macOS:

# Hitung kata
wc -w file.txt

# Hitung baris, kata, karakter
wc file.txt
# output: baris kata karakter namafile

# Hitung kata dalam string
echo "halo dunia" | wc -w
# 2

# Hitung kata di beberapa file, dengan total
wc -w *.txt

Hitung kata unik (ukuran kosakata):

cat file.txt | tr '[:upper:]' '[:lower:]' | tr -cs '[:alpha:]' '\n' | sort | uniq -c | sort -rn | head -20

Pipeline ini: huruf kecil → satu kata per baris → urut → hitung yang unik → urut berdasarkan jumlah.

Python one-liner:

python3 -c "import sys; text=open(sys.argv[1]).read(); print(len(text.split()))" file.txt

Windows PowerShell:

(Get-Content file.txt -Raw).Split() | Where-Object { $_ } | Measure-Object | Select-Object -ExpandProperty Count

Batas karakter umum per platform

Platform / format Batas Yang dihitung
Twitter / X 280 karakter Karakter (bukan kata)
SMS 160 karakter Karakter per segmen
Meta title (SEO) 50–60 karakter Karakter
Meta description (SEO) 150–160 karakter Karakter
Postingan LinkedIn 3.000 karakter Karakter
Caption Instagram 2.200 karakter Karakter
Artikel Medium (optimal) 1.500–2.500 kata Kata
Artikel blog (rata-rata SEO) 1.200–2.500 kata Kata

Untuk judul dan deskripsi SEO, jumlah karakter lebih penting dari jumlah kata karena Google memotong berdasarkan lebar piksel (sekitar 580 px untuk judul).

Mengecualikan konten tertentu sebelum menghitung

Hitung kata sambil mengabaikan URL:

function countWordsNoUrls(text) {
    const noUrls = text.replace(/https?:\/\/\S+/g, '');
    return noUrls.trim().split(/\s+/).filter(Boolean).length;
}

Hitung kata sambil mengabaikan blok kode (Markdown):

import re

def count_words_no_code(markdown: str) -> int:
    # Hapus fenced code blocks
    no_code = re.sub(r'```[\s\S]*?```', '', markdown)
    # Hapus inline code
    no_code = re.sub(r'`[^`]+`', '', no_code)
    return len(no_code.split())

Ringkasan

  • Hitung kata: text.split() di Python, text.trim().split(/\s+/).filter(Boolean) di JavaScript.
  • Hitung karakter: len(text) di Python, text.length di JavaScript.
  • Command line: wc -w file.txt di Linux/macOS.
  • Waktu baca: jumlah kata dibagi 200, dibulatkan ke atas.
  • Untuk metadata SEO, hitung karakter bukan kata — Google memotong berdasarkan lebar piksel.