npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@korap/cmc-tagger

v1.1.1

Published

Reads CoNLL-U format from stdin and annotates emojis, emoticons, hashtags, URLs, email addresses, @addresses, and action words. Writes CoNLL-U format to stdout.

Readme

conllu-cmc

Docker

Reads CoNLL-U format from stdin and annotates Unicode emojis, ASCII emoticons, Wikipedia emoji templates, action words, hashtags, URLs, email addresses, and @names with CMC-oriented STTS-IBK tags in the XPOS column (Beißwenger/Bartsch/Evert/Würzner 2016). Writes CoNLL-U format to stdout.

For Unicode emojis (EMOIMG), the base emoji without skin tone modifiers is written to the LEMMA column and Unicode emoji metadata is added to the FEATS column:

# text = 😂
1	😂	😂	_	EMOIMG	g=smileys_&_emotion|s=face_smiling|q=fully_qualified|v=E0.6|n=face_with_tears_of_joy	_	_	_	_

The FEATS field encodes: g (group), s (subgroup), q (qualification status), v (Unicode version first introduced), n (emoji name – including skin tone). In n, separators such as : and , are preserved without following spaces, e.g. thumbs_up:light_skin_tone or family:man,man,boy. See https://www.unicode.org/Public/UCD/latest/emoji/emoji-test.txt for details.

Tagset

All CMC annotations are written to the XPOS column (column 5 in CoNLL-U). For EMOIMG, the tagger also normalizes the LEMMA column to the base emoji and enriches FEATS with emoji metadata when available.

| Tag | Phenomenon | Example token | Output behavior | | --- | --- | --- | --- | | EMOWIKI | Wikipedia emoji templates | [_EMOJI:{{S\|;)}}_] | Writes EMOWIKI to XPOS | | EMOIMG | Unicode emoji tokens | 😂, 😇 | Writes EMOIMG to XPOS, normalizes LEMMA to the base emoji, and adds FEATS metadata | | AKW | Action words / inflectives | :grins: | Writes AKW to XPOS | | EMOASC | ASCII emoticons | :), <3 | Writes EMOASC to XPOS | | HST | Hashtags | #KorAP, #3D | Writes HST to XPOS when the hashtag contains at least one letter | | URL | URLs | https://korap.ids-mannheim.de | Writes URL to XPOS | | EML | Email addresses | [email protected] | Writes EML to XPOS | | ADR | @-names / addresses | @markup | Writes ADR to XPOS |

Numeric-only forms such as #10 are not tagged as HST.

CoNLL-U Output Examples

The following example shows how the different tags appear in CoNLL-U output. In all cases, the annotation is written to XPOS; only EMOIMG additionally changes LEMMA and FEATS.

# foundry = cmc
# text_id = readme-demo
# text = [_EMOJI:{{cool}}_] 😂 :grins: :) #KorAP https://korap.ids-mannheim.de [email protected] @handle <3
1	[_EMOJI:{{cool}}_]	_	_	EMOWIKI	_	_	_	_	_
2	😂	😂	_	EMOIMG	g=smileys_&_emotion|s=face_smiling|q=fully_qualified|v=E0.6|n=face_with_tears_of_joy	_	_	_	_
3	:grins:	_	_	AKW	_	_	_	_	_
4	:)	_	_	EMOASC	_	_	_	_	_
5	#KorAP	_	_	HST	_	_	_	_	_
6	https://korap.ids-mannheim.de	_	_	URL	_	_	_	_	_
7	[email protected]	_	_	EML	_	_	_	_	_
8	@handle	_	_	ADR	_	_	_	_	_
9	<3	_	_	EMOASC	_	_	_	_	_

For compound emojis with modifiers or zero-width joiners, the tagger still writes EMOIMG and reduces LEMMA to the base emoji. For example, ✊🏿 is normalized to lemma , and 👨‍👨‍👦 is normalized to lemma 👨.

Current Limitations

  • The tagger is purely pattern-based. It does not consider sentential, pragmatic, or discourse context.
  • The matching strategy is intentionally recall-oriented rather than precision-oriented. Ambiguous strings such as <3 may therefore produce false positives.
  • Annotation quality depends heavily on tokenization. Unicode emojis, grapheme clusters, zero-width joiners, modifiers, emoticons, and Wikipedia emoji templates should already be segmented into correct token units before tagging.
  • We recommend KorAP-Tokenizer, which supports Unicode 17.0, including grapheme clusters, zero-width joiners, modifiers, emoticons, and Wikipedia-template-based emojis.

Local Usage

The npm package exposes the CLI under both conllu-cmc and cmc-tagger.

Using npm/node

cat ./test/data/ndy.conllu | npx conllu-cmc

# Show version
npx conllu-cmc -V

# Alternative CLI name
npm exec --yes --package=. cmc-tagger -- -V

Using standalone binary

cat ./test/data/ndy.conllu | ./bin/linux/cmc-tagger

# Show version
./bin/linux/cmc-tagger -V

Generate KorAP-XML zip with CMC annotations

korapxml2conllu kyc.zip | cmc-tagger -s | conllu2korapxml > kyc.cmc.zip

Docker Usage

# Annotate CoNLL-U input
cat ./test/data/ndy.conllu | docker run --rm -i korap/conllu-cmc

# With sparse output (only annotated lines)
cat ./test/data/ndy.conllu | docker run --rm -i korap/conllu-cmc -s

# Generate KorAP-XML zip with CMC annotations
# For korapxmltool see <https://github.com/KorAP/korapxmltool>
korapxmltool -A "docker run --rm -i korap/conllu-cmc -s" -t zip ndy.zip

# Show help
docker run --rm korap/conllu-cmc --help

# Show version
docker run --rm korap/conllu-cmc -V

Performance

The tagger is implemented in Node.js because the runtime provides efficient regular-expression execution, which is central to this regex-based annotation workflow.

On CMC corpora with many matches, throughput is above 10 MB/s. This includes dense CMC material such as the NottDeuYTSch corpus.

Applications

The tagger is already used in corpus analysis scenarios with the corpus analysis platform KorAP.

German Wikipedia Talk Pages

The German Wikipedia Talk Pages corpus is available at https://korap.ids-mannheim.de/instance/wiki. A query for an EMOWIKI, an EMOASC, and an EMOIMG sequence in one posting with up to 12 intervening tokens between each match is:

[cmc/p=EMOWIKI] []{0,12} [cmc/p=EMOASC] []{0,12} [cmc/p=EMOIMG]

You can run this query directly here: https://korap.ids-mannheim.de/instance/wiki?q=[cmc%2Fp%3DEMOWIKI]+[]{0%2C12}+[cmc%2Fp%3DEMOASC]+[]{0%2C12}+[cmc%2Fp%3DEMOIMG].

NottDeuYTSch

The NottDeuYTSch corpus (Cotgrove 2023) is accessible on request via https://korap.ids-mannheim.de/instance/nottdeuytsch.

Installation

Pre-built Binaries

Download pre-built executables from the Releases page:

  • cmc-tagger - Linux x64
  • cmc-tagger - macOS x64
  • cmc-tagger.exe - Windows x64

npm

# Install from the npm registry
npm install @korap/cmc-tagger

# Or install globally to use the cmc-tagger CLI anywhere
npm install -g @korap/cmc-tagger

Build from source

npm install

Build standalone executables

# Build for all platforms
npm run pkg-all

# Or build for specific platforms
npm run pkg-linux   # Linux x64
npm run pkg-macos   # macOS x64
npm run pkg-win     # Windows x64

Executables are created as cmc-tagger or cmc-tagger.exe in bin/linux/, bin/macos/, and bin/win/.

Docker

docker pull korap/conllu-cmc

References

  • Beißwenger, Michael/Bartsch, Sabine/Evert, Stefan/Würzner, Kay-Michael (2016): EmpiriST 2015: A Shared Task on the Automatic Linguistic Annotation of Computer-Mediated Communication and Web Corpora. In: Proceedings of the 10th Web as Corpus Workshop. Berlin: Association for Computational Linguistics, S. 44–56. https://doi.org/10.18653/v1/W16-2606.
  • Cotgrove, Louis (2023): New opportunities for researching digital youth language: The NottDeuYTSch corpus. In: Kupietz, Marc/Schmidt, Thomas (Hrsg.): Neue Entwicklungen in der Korpuslandschaft der Germanistik. Beiträge zur IDS-Methodenmesse 2022. (= Korpuslinguistik und interdisziplinäre Perspektiven auf Sprache (CLIP) 11). Tübingen: Narr, S. 102-115.
  • Margaretha, Eliza/Lüngen, Harald/Diewald, Nils/Kupietz, Marc/Yaddehige, Rameela (2025): Building and querying Wikipedia discussion corpora using KorAP. In: Impulses and Approaches to Computer-Mediated Communication: Proceedings of the 12th International Conference on Computer Mediated Communication and Social Media Corpora for the Humanities (CMC 2025). Edited by Annamária Fábián/Igor Trost, S. 123-124.