From 2c6cc0940e4e386b4e8575d4e5646c175df4ef5a Mon Sep 17 00:00:00 2001 From: Alexandre Dulaunoy Date: Sun, 28 Apr 2013 15:09:02 +0200 Subject: [PATCH] Flow of operation in DomainClassifier expressed in GraphViz --- doc/domainclassifier-flow.dot | 20 ++++++++++++++++++++ doc/domainclassifier-flow.png | Bin 0 -> 22208 bytes 2 files changed, 20 insertions(+) create mode 100644 doc/domainclassifier-flow.dot create mode 100644 doc/domainclassifier-flow.png diff --git a/doc/domainclassifier-flow.dot b/doc/domainclassifier-flow.dot new file mode 100644 index 0000000..ebb6669 --- /dev/null +++ b/doc/domainclassifier-flow.dot @@ -0,0 +1,20 @@ +digraph g{ + z [label="raw text including probable hostnames"]; + a -> b; + a [label=".domain()",shape=box,fillcolor="palegreen",style="filled"]; + z -> a [label=" extracting"]; + b [label=".validdomain(extended=True)",shape=box,fillcolor="palegreen",style="filled"]; + c [label=".localizedomain(cc='country code')",shape=box,fillcolor="palegreen",style="filled"]; + b->c; + e [label=".validdomain(extended=False)",shape=box,fillcolor="palegreen",style="filled"]; +a->e; +f [label=".rankdomain()",shape=box,fillcolor="palegreen",style="filled"]; +c->f; +g [label=".include(expression=regexp)",shape=box,fillcolor="palegreen",style="filled" ]; +h [label=".exclude(expression=regexp)",shape=box,fillcolor="palegreen",style="filled" ]; +f->g; +g->h; +e->g; +i [label="set of hostnames", fillcolor="palegreen",style="filled"]; +h->i; +} diff --git a/doc/domainclassifier-flow.png b/doc/domainclassifier-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..71225ea2d4995c3f11fb7b507ce25acb47af7563 GIT binary patch literal 22208 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 IM6N<$g3lI%y#N3J literal 0 HcmV?d00001