# Analyze a Chat or IRC Log

Paste an IRC or chat log and get stats in your browser: who talked most, activity by hour and weekday, top words, links shared, and joins/parts/quits.

## Run it

- **CLI:** `gizza tool chat-log-analyzer "2024-01-05 21:07:33 <alice> pizza tonight? https://example.com/menu
2024-01-05 21:08:01 <@bob> pizza sounds great
2024-01-05 21:09:00 -!- carol [~c@host] has joined #food
2024-01-06 09:16:10 * alice waves"`
- **Web:** https://gizza.ai/tools/chat-log-analyzer/
- **Agents:** machine-readable descriptor (parameters JSON Schema) at https://gizza.ai/tools/chat-log-analyzer/tool.json

## Inputs

- `log` — Chat or IRC log _(field)_
- `output` — Report format _(field)_
- `top` — Entries per ranking _(field)_
- `min_word_length` — Minimum word length _(field)_
- `ignore_stopwords` — Ignore common filler words _(field)_
- `exclude_nicks` — Exclude these nicks (bots) _(field)_

## Output

- Log report (text)

## Query parameters

Open the tool pre-filled and auto-run via URL:

- `log` — Chat or IRC log
- `output` — Report format
- `top` — Entries per ranking
- `min_word_length` — Minimum word length
- `ignore_stopwords` — Ignore common filler words
- `exclude_nicks` — Exclude these nicks (bots)

Example: `https://gizza.ai/tools/chat-log-analyzer/?log=2024-01-05%2021%3A07%3A33%20%3Calice%3E%20pizza%20tonight%3F%20https%3A%2F%2Fexample.com%2Fmenu%0A2024-01-05%2021%3A08%3A01%20%3C%40bob%3E%20pizza%20sounds%20great%0A2024-01-05%2021%3A09%3A00%20-%21-%20carol%20%5B~c%40host%5D%20has%20joined%20%23food%0A2024-01-06%2009%3A16%3A10%20%2A%20alice%20waves&output=summary&top=10&min_word_length=3&ignore_stopwords=true&exclude_nicks=gizzabot%2C%20travis%2A`

---

## About this tool

Paste a chat transcript or IRC log to get a local, deterministic activity report. The analyzer counts messages, participants, words, characters, links, channel events, `/me` actions, busiest hours, and weekday activity without uploading the log anywhere.

It accepts common line shapes such as `21:07 <alice> hey`, `[21:07:33] <@alice> hey`, `2024-01-05 21:07:33 <alice> hey`, tab-separated WeeChat exports, and plain `alice: hey` transcripts. Use the bot exclusion field for service accounts such as `gizzabot` or wildcard prefixes such as `travis*`.

Example input:

```text
2024-01-05 21:07:33 <alice> pizza tonight? https://example.com/menu
2024-01-05 21:08:01 <@bob> pizza sounds great
2024-01-05 21:09:00 -!- carol [~c@host] has joined #food
2024-01-06 09:16:10 * alice waves
```

Example summary output includes:

```text
Messages: 3
Participants: 2
Busiest hour: 21:00
Who talked most
Top words
Links shared
Channel events
```

Limits and edge cases: the input is capped at 5,000,000 bytes; one pasted log is analyzed at a time; event-only logs return an error because there are no messages to count; weekday stats need dated lines; time-only logs still produce hour stats; ambiguous numeric dates default to day-first unless the data proves month-first; stopword filtering is English-only.

## FAQ

<details>
<summary>Which chat log formats does it understand?</summary>

It auto-detects common IRC-style formats with angle-bracket nicks, optional bare or bracketed timestamps, ISO dates, 12-hour AM/PM times, tab-separated WeeChat columns, `/me` actions, and simple `nick: message` transcripts. You do not need to choose a format first.

</details>

<details>
<summary>Do joins, parts, quits, and mode changes count as messages?</summary>

No. Channel events are counted in the events section, but they are excluded from message, word, link, and participant rankings. `/me` action lines are counted as messages and also listed separately as actions.

</details>

<details>
<summary>How do I remove bot noise from the results?</summary>

Add bot nicks to the exclude field. A comma-separated list such as `gizzabot, travis*` removes the exact nick `gizzabot` and every nick beginning with `travis` from all statistics.

</details>

<details>
<summary>Why is the weekday section empty for my log?</summary>

Weekday activity needs full dates. Logs with only times, such as `21:07 <alice> hi`, can still report busiest hours and participant rankings, but the analyzer cannot infer the day of week without a date.

</details>

## Related tools

- [Boxplot Chart Generator](https://gizza.ai/tools/boxplot-chart/): Paste values or grouped CSV data and render a box-and-whisker SVG with quartiles, whiskers, mean markers, notches, outliers, and summary stats.
- [Correlated sample generator](https://gizza.ai/tools/correlated-sample-generator/): Generate multivariate-normal sample data from a covariance or correlation matrix, with seeded CSV, TSV, JSON or stats output.
- [Histogram Chart Maker](https://gizza.ai/tools/histogram-chart/): Paste a list of numbers and render an SVG histogram. Auto bin rules or an explicit bin count/width, count, percent, density or cumulative bars, mean and median markers.
- [Z-Score Normalize](https://gizza.ai/tools/z-score-normalize/): Standardize a list of numbers with z-score, min-max, max-abs, or robust median/IQR scaling. Population or sample standard deviation, private and browser-local.
- [Chat Transcript Formatter](https://gizza.ai/tools/chat-transcript-formatter/): Clean a messy chat log into one consistently-formatted transcript with normalized speakers, timestamps, and WhatsApp/IRC/plain line parsing.
