Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

License License License License Carthage compatible

Kafka is an advanced Natural Language Processing library written in Swift. It's built for speed, simplicity, and easy integration into apps. Kafka currently provides linear neural network models for tagging and parsing, with pretrained models and word vectors. It's commercial open-source software, released under the MIT license.

💫 Version 0.1 out now! Check out the release notes here.


Data Contains word embeddings, a list of POS tags, and a list of dependency tags.
DependencyParser Dependency Parser parses Docs for dependency relations between word tokens.
Doc A container for accessing linguistic annotations.
Sentence A class that holds relevant information for a single sentence.
Token A class that holds relevant information for a single token.
Kafka An interface for the library.
Math Math holds helper functions for common mathematical computations.
PartialParse A PartialParse is a snapshot of an arc-standard dependency parse.
Transducer Holds methods for conversions between data types.
Internal Practices Some documentation for our internal practises.


  • Non-destructive tokenization
  • pretrained models and word vectors
  • State-of-the-art speed
  • Part-of-speech tagging
  • Dependency parsing
  • Named entity recognition
  • Syntax-driven sentence segmentation
  • Built in visualizers for syntax and NER


iOS 12.0+ | macOS 10.14+ | Mac Catalyst 13.0+ | tvOS 12.0+ | watchOS 5.0+



You can use CocoaPods to install Kafka by adding it to your Podfile:

platform :ios, '13.0'

target 'MyApp' do
    pod 'Kafka'


You can use Carthage to install Kafka by adding it to your Cartfile:

github "questo-ai/kafka"

If you use Carthage to build your dependencies, make sure you have added Kafka.framework to the "Linked Frameworks and Libraries" section of your target, and have included them in your Carthage framework copying build phase.



import Kafka


let doc = Doc(string: "Memories warm you up from the inside. But they also tear you apart.") // From Haruki Murakami, Kafka on the Shore
for sentence in doc.sentences {
    for token in sentence {
        /// The dependency arcs are stored as properties of the Tokens.
        /// Arcs are (headIndex: Int, index: Int, tag: String) signifying
        /// the dependency relation `headIndex ->tag index`, where headIndex
        /// is the index of the head word, index is the index of the dependant,
        /// and tag is a string representing the dependency relation label.
        print(token.text, token.tag, head.text)

Accessing Token subtrees, lefts and rights

/// Kafka dependency graphs build a hierarchy of tokens in a sentence.
/// e.g Memories warm you up from the inside.
///          warm ___________
///         /    \     \     \
/// Memories     you   up    from
///                              \
///                            inside.
///                          /
///                        the

/// token.lefts is of type [Token]
for left in token.lefts {
    /// you can manually access the String representation 
    /// of a given token by using the token.text property

/// token.rights is of type [Token]
for right in token.rights {
    /// Kafka classes conform to the CustomStringConvertible
    /// protocol, so you can also just print them directly

/// token.subtree is of type [Token]
for node in token.subtree {