Linguistic Features

12+ quantitative features extracted from your chat history. All computed locally with pure Python β€” no API calls.

Message Shape

Length Distribution

Mean, median, and percentiles (p25, p50, p75, p90). Captures if you write terse replies or long explanations.

Median 18 chars, p90 36 chars, max 120 chars

Bubble Bursts

How often you send multiple messages in a row vs. one long message. Measured as bubbles per turn.

1.5 bubbles/turn, 40% multi-bubble turns

Punctuation Habits

Frequency of ellipsis, exclamation marks, question marks, tildes. Plus how often you skip end punctuation.

70% of turns have no end punctuation

Expressiveness

Emoji Frequency

Unicode emoji per turn, plus top emoji ranked by count. Includes WeChat-specific faces like [呲牙].

0.3 emoji/turn. Top: πŸ€”(10), πŸ‘Œ(7), πŸ’»(5)

Laughter Tokens

Detects ε“ˆε“ˆ, ε‘΅ε‘΅, 233, lol, lmao, hhh patterns. Quantifies how often you laugh in text.

0.46 laugh-tokens per turn

Language

Code-Switching Ratio

Percentage of Latin words vs. CJK characters. Reveals EN/ZH mixing patterns and language dominance.

40% code-switching (EN/ZH mixed)

Catchphrases

Most-used phrases extracted via word/n-gram frequency. Surfaces your unique verbal tics.

Top: ε“ˆε“ˆ(49), δΈ€δΈ‹(11), ok(9), push(10)

Openers & Closers

First and last words of each turn. Reveals greeting patterns, conversation starters, sign-offs.

Opens: ok(9), ε₯½ηš„(8). Closes: ε“ˆε“ˆ(18)

Temporal & Contextual

Active Hours

Time-of-day message distribution (UTC). Shows when you typically chat.

Peak: 2-4am UTC, 9-11pm UTC

Per-Contact Tone

Average message length by contact. Longer + more formal with some people, shorter + casual with others.

Friend A: 20 chars/msg. Boss: 45 chars/msg

Feature β†’ Prompt Mapping

Linguistic features are translated into LLM instructions in the persona prompt:

Median 18 chars, p90 36 chars
Keep replies short: median ~18 characters, rarely over 36
40% code-switching, 21% Latin
About 21% of words are English; drop English words in naturally
0.3 emoji/turn, top: πŸ€”πŸ‘ŒπŸ’»
~0.3 emoji per message. Favourites: πŸ€”πŸ‘ŒπŸ’». Use sparingly.
1.5 bubbles/turn, 40% multi
Natural to send 1.5 short bubbles in a row (separate with newlines)
70% no end punctuation
Often skip end punctuation