DEV Community

Tu Kiet Diep
Tu Kiet Diep

Posted on Fully Autonomous

I counted "overused" manhwa character names in 598,733 Reddit posts and comments. Here is the method and what broke

Readers of romance fantasy and murim webcomics joke that every duke is called Lloyd and every villainess is Penelope. I run a small name generator for that genre, fantasynames.art (disclosure: my project), and it flags names as "overused". The flags were based on reader threads and gut feeling, so I wanted numbers behind them.

The question I could answer honestly: how often do readers actually talk about each flagged name? Not "how many stories use it" (there is no clean dataset for that), just talk. This post is the method, the results, and the places where the data is weaker than it looks.

Data: Arctic Shift, five communities, six months

Reddit's own API doesn't let you search a subreddit by date range, so I used the public Arctic Shift archive API. It has posts/search and comments/search endpoints that take a subreddit and a time range.

  • Communities: r/OtomeIsekai, r/manhwa, r/webtoons, r/manhwarecommendations, r/MurimReaders (r/murim exists but returned nothing for the window)
  • Window: 26 April 2026 to 26 October 2026, pulled on 28 October 2026
  • Total: 598,733 items in 56,154 threads

Paging is by time: ask for items sorted ascending, then move after to the timestamp of the last item you got.

import time
import requests

BASE = "https://arctic-shift.photon-reddit.com/api"
S = requests.Session()
S.headers["User-Agent"] = "name-study/1.0 (research; contact address here)"


def fetch(kind, sub, after, before):
    params = {"subreddit": sub, "after": after, "before": before,
              "limit": "auto", "sort": "asc"}
    while True:
        r = S.get(f"{BASE}/{kind}/search", params=params, timeout=180)
        if r.status_code == 200:
            return r.json().get("data") or []
        if r.status_code in (422, 429):
            wait = float(r.headers.get("x-ratelimit-reset", 30)) + 1.5
            time.sleep(min(wait, 75))
            continue
        r.raise_for_status()


def pull(kind, sub, start, end):
    after, seen = start, set()
    while after < end:
        page = [x for x in fetch(kind, sub, after, end) if x["id"] not in seen]
        if not page:
            break
        seen.update(x["id"] for x in page)
        yield from page
        after = page[-1]["created_utc"]
        time.sleep(1.2)
Enter fullscreen mode Exit fullscreen mode

Moving after to the last timestamp (not last + 1) and skipping ids already seen avoids losing items that share the same second.

Two things that saved me: a fixed gap between requests (1.2 s) so I was never the reason the archive slowed down, and writing every page to disk with resume support, because a six-month pull of r/manhwa comments takes hours.

Matching names without counting the wrong thing

A naive "Rose" in text counts flowers. The rules I ended up with:

  • Whole word, capital first letter, spelled as on the list.
  • Accents folded, so César also matches Cesar.
  • Hyphenated compounds don't count (Jean-Claude is not Claude).
  • Each item counts once per name, however many times the name appears.
  • Threads are counted via the post plus all its comments (link_id).
  • Deleted bodies and known bots (AutoModerator, RemindMeBot and a few others) are dropped.
import re
import unicodedata


def fold(s):
    return "".join(c for c in unicodedata.normalize("NFD", s)
                   if not unicodedata.combining(c))


def name_pattern(name):
    return re.compile(r"(?<![\w-])" + re.escape(fold(name)) + r"(?![\w-])")


PATTERNS = {n: name_pattern(n) for n in ["Lloyd", "Penelope", "Cesar"]}


def names_in(text):
    t = fold(text)
    return {n for n, p in PATTERNS.items() if p.search(t)}
Enter fullscreen mode Exit fullscreen mode

Then I simply dropped names that are also common words: Rose, Ivy, Ruby, Violet, Winter, Eve, Christian, Regina and Scholar. Claude went too, because Reddit talks about the AI assistant far more than about any duke. No regex fixes that; a plain count would mostly measure the word.

Results

Given names, ranked by number of threads (mentions = posts and comments containing the name):

Name Threads Mentions Different authors
Lloyd 567 1,027 737
Penelope 328 807 445
Callisto 188 418 220
Lucas 164 284 177
Noah 150 233 147
Charlotte 147 191 113
Derrick 138 305 139
Elise 136 180 143
Cesare 134 320 186
Diana 119 309 182

For murim titles (whole phrases, any capitalisation), "Heavenly Demon" is in a league of its own: 1,090 threads and 1,900 mentions, followed by Mad Demon (395 threads), Fist King (159) and Martial God (150).

Why I rank by threads, not mentions

Mentions alone are easy to inflate: one long argument about a single series can produce hundreds of them. So I also recorded what share of a name's mentions sit in its single busiest thread. Lloyd's busiest thread holds 2.1% of its mentions, so the count is spread across many discussions. Alicia's busiest thread holds 29.9%, and Derrick's 19.7%, which means one conversation drives a big part of their numbers. Ranking by threads first, then mentions, keeps those cases honest.

What broke

  • The archive returned HTTP 500 for over an hour during the pull. Some date ranges have no comments at all: r/manhwa 26 May to 4 June and 2 to 25 October, r/manhwarecommendations 7 to 30 June. Counts for those communities are lower than the real six months. I published the gaps next to the numbers instead of quietly filling them.
  • New communities have short histories. r/MurimReaders was created on 30 August 2026, so it only contributes two months.
  • A mention is any use of the name: a real person, a different story, a place. Nothing was checked by hand.

What the numbers do and don't say

They measure talk in mostly English-speaking communities, by the small share of readers who post. They only cover names that were already on my list, so they say nothing about names I did not flag. And a high count doesn't make a name bad; Lloyd is popular partly because readers like those characters.

The full table, method notes and a CSV (CC BY 4.0, counts only, no Reddit text) are on the overused manhwa names page. If you know a better source for "names used in published webcomics" rather than "names readers talk about", I would love to hear about it.

Top comments (0)