diff --git a/Jonas_Solutions/Task03_Instructions.py b/Jonas_Solutions/Task03_Instructions.py new file mode 100644 index 0000000..17e8fe3 --- /dev/null +++ b/Jonas_Solutions/Task03_Instructions.py @@ -0,0 +1,84 @@ +import numpy as np +import pandas as pd +from sklearn.feature_extraction.text import CountVectorizer +from keras.preprocessing.text import Tokenizer +from keras.preprocessing.sequence import pad_sequences +from keras.models import Sequential +from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D +from sklearn.model_selection import train_test_split +from keras.utils.np_utils import to_categorical +import re + +''' +Task 3: playing with NN framwork/keras and basic sentiment analysis +- use the following model as a baseline and improve it! +- export your metadata (just basic hyperparameters and outcomes for test data!) +- test data = 0.3 (not in this example, change it!) +- random_state = 4222 +- no need to cross-validation! +''' + +# parameters +max_fatures = 500 +embed_dim = 128 +lstm_out = 196 +dropout = 0.1 +dropout_1d = 0.4 +recurrent_dropout = 0.1 +random_state = 1324 +validation_size = 1000 +batch_size = 16 +epochs=2 +verbose= 2 + +df = pd.read_csv('dataset_sentiment.csv') +df = df[['text','sentiment']] +print(df[0:10]) + +df = df[df.sentiment != "Neutral"] +df['text'] = df['text'].apply(lambda x: x.lower()) +df['text'] = df['text'].apply(lambda x: x.replace('rt',' ')) +df['text'] = df['text'].apply((lambda x: re.sub('[^a-zA-z0-9\s]','',x))) + +tok = Tokenizer(num_words=max_fatures, split=' ') +tok.fit_on_texts(df['text'].values) +X = tok.texts_to_sequences(df['text'].values) +X = pad_sequences(X) + +nn = Sequential() +nn.add(Embedding(max_fatures, embed_dim, input_length = X.shape[1])) +nn.add(SpatialDropout1D(dropout_1d)) +nn.add(LSTM(lstm_out, dropout=dropout, recurrent_dropout=recurrent_dropout)) +nn.add(Dense(2, activation='softmax')) +nn.compile(loss = 'categorical_crossentropy', optimizer='adam', metrics = ['accuracy']) +print(nn.summary()) + +Y = pd.get_dummies(df['sentiment']).values +X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.30, random_state = random_state) +nn.fit(X_train, Y_train, epochs = epochs, batch_size=batch_size, verbose=verbose) + +X_validate = X_test[-validation_size:] +Y_validate = Y_test[-validation_size:] +X_test = X_test[:-validation_size] +Y_test = Y_test[:-validation_size] +score, accuracy = nn.evaluate(X_test, Y_test, verbose = 2, batch_size = batch_size) +print("score: %.2f" % (score)) +print("acc: %.2f" % (accuracy)) + +pos_cnt, neg_cnt, pos_ok, neg_ok = 0, 0, 0, 0 +for x in range(len(X_validate)): + result = nn.predict(X_validate[x].reshape(1,X_test.shape[1]),batch_size=1,verbose = 2)[0] + if np.argmax(result) == np.argmax(Y_validate[x]): + if np.argmax(Y_validate[x]) == 0: neg_ok += 1 + else: pos_ok += 1 + if np.argmax(Y_validate[x]) == 0: neg_cnt += 1 + else: pos_cnt += 1 + +print("pos_acc", pos_ok/pos_cnt*100, "%") +print("neg_acc", neg_ok/neg_cnt*100, "%") + +X2 = ['what are u going to say about that? the truth, wassock?!'] +X2 = tok.texts_to_sequences(X2) +X2 = pad_sequences(X2, maxlen=26, dtype='int32', value=0) +print(X2) +print(nn.predict(X2, batch_size=1, verbose = 2)[0]) diff --git a/Jonas_Solutions/Task_02_JonasWeinz.ipynb b/Jonas_Solutions/Task_02_JonasWeinz.ipynb index e450952..52e963d 100644 --- a/Jonas_Solutions/Task_02_JonasWeinz.ipynb +++ b/Jonas_Solutions/Task_02_JonasWeinz.ipynb @@ -13,7 +13,9 @@ "* Tutorial on Datacamp: https://www.datacamp.com/community/tutorials/scikit-learn-fake-news\n", "\n", "* liar dataset paper: https://www.cs.ucsb.edu/~william/papers/acl2017.pdf\n", - " * dataset: https://www.cs.ucsb.edu/~william/data/liar_dataset.zip" + " * dataset: https://www.cs.ucsb.edu/~william/data/liar_dataset.zip\n", + "\n", + "* Mex Vocabulary: http://jens-lehmann.org/files/2015/semantics_mex.pdf" ] }, { @@ -62,7 +64,7 @@ "from IPython.display import display, Markdown, Latex\n", "import collections\n", "import traceback\n", - "import os" + "import os\n" ] }, { @@ -104,6 +106,9 @@ " print('Confusion matrix, without normalization')\n", "\n", " thresh = cm.max() / 2.\n", + " \n", + " pp(cm)\n", + " \n", " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", " plt.text(j, i, cm[i, j],\n", " horizontalalignment=\"center\",\n", @@ -125,7 +130,53 @@ " score = metrics.accuracy_score(yt, pred)\n", " pp(\"score: \" + str(score))\n", " cm = metrics.confusion_matrix(yt, pred, labels=labels)\n", - " plot_confusion_matrix(cm, classes=labels, title=title)" + " plot_confusion_matrix(cm, classes=labels, title=title)\n", + " return cm" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"\\nfrom rdflib import Graph, Literal, BNode, RDF, Namespace\\nfrom rdflib.namespace import FOAF, DC, XSD\\n\\nmexcore = Namespace('http://mex.aksw.org/mex-core#')\\nmexperf = Namespace('http://mex.aksw.org/mex-perf#')\\nmexalgo = Namespace('http://mex.aksw.org/mex-algo#')\\nprov = Namespace('http://www.w3.org/ns/prov#')\\n\\ndef create_mex_graph():\\n graph = Graph()\\n graph.bind(mexcore)\\n graph.bind(mexperf)\\n graph.bind(mexalgo)\\n graph.bind(prov)\\n graph.bind(FOAF)\\n graph.bind(DC)\\n graph.bind(XSD)\\n \\n return graph\\n\\ndef mex_performance(experiment, model, dataset, performance, phase='Train', graph=create_mex_graph()):\\n \\n p = BNode()\\n \\n\"" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "'''\n", + "from rdflib import Graph, Literal, BNode, RDF, Namespace\n", + "from rdflib.namespace import FOAF, DC, XSD\n", + "\n", + "mexcore = Namespace('http://mex.aksw.org/mex-core#')\n", + "mexperf = Namespace('http://mex.aksw.org/mex-perf#')\n", + "mexalgo = Namespace('http://mex.aksw.org/mex-algo#')\n", + "prov = Namespace('http://www.w3.org/ns/prov#')\n", + "\n", + "def create_mex_graph():\n", + " graph = Graph()\n", + " graph.bind(mexcore)\n", + " graph.bind(mexperf)\n", + " graph.bind(mexalgo)\n", + " graph.bind(prov)\n", + " graph.bind(FOAF)\n", + " graph.bind(DC)\n", + " graph.bind(XSD)\n", + " \n", + " return graph\n", + "\n", + "def mex_performance(experiment, model, dataset, performance, phase='Train', graph=create_mex_graph()):\n", + " \n", + " p = BNode()\n", + " \n", + "'''" ] }, { @@ -139,7 +190,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -218,7 +269,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -234,7 +285,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -389,179 +440,78 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "X1, Xt1, y1, yt1 = train_test_split(df_1.drop('label', axis=1)['text'], df_1.label, test_size=0.25, random_state=4222)" ] }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "vectorizer_1 = CountVectorizer(stop_words='english')\n", - "vec_train_1 = vectorizer_1.fit_transform(X1)\n", - "vec_test_1 = vectorizer_1.transform(Xt1)" - ] - }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ - "#tfidf_vectorizer_1 = TfidfVectorizer(stop_words='english', max_df=0.7)\n", - "#tfidf_train_1 = tfidf_vectorizer_1.fit_transform(X1)\n", - "#tfidf_test_1 = tfidf_vectorizer_1.transform(Xt1)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "#display(count_vectorizer.get_feature_names()[0:10])\n", - "#display(count_vectorizer.get_feature_names()[-10:])\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "#display(tfidf_vectorizer.get_feature_names()[:10])\n", - "#display(tfidf_vectorizer.get_feature_names()[-10:])" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "#count_df = pd.DataFrame(count_train.A, columns=count_vectorizer.get_feature_names())\n", - "#tfidf_df = pd.DataFrame(count_train.A, columns=tfidf_vectorizer.get_feature_names())\n", - "#diff = set(count_df.columns) - set(tfidf_df.columns)\n", - "#pp(count_df.equals(tfidf_df))" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "#clf = MultinomialNB()\n", - "#clf.fit(tfidf_train_1, y1)\n", - "#pred = clf.predict(tfidf_test_1)\n", - "#score = metrics.accuracy_score(yt1, pred)\n", - "#pp(\"score: \" + str(score))\n", - "#cm = metrics.confusion_matrix(yt1, pred, labels=[\"FAKE\", \"REAL\"])\n", - "#plot_confusion_matrix(cm, classes=[\"FAKE\", \"REAL\"], title= \"TFIDF_Vecctorizer, Multinomial Naive Bayes\")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "'score: 0.9320143127762577'\n", - "Confusion matrix, without normalization\n", - "'score: 0.8838383838383839'\n", - "Confusion matrix, without normalization\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "clf_a = MultinomialNB()\n", - "clf_a.fit(vec_train_1, y1)\n", - "test_classifier(labels=[\"FAKE\",\"REAL\"], title=\"Configuration 1, model a -- train\", Xt=vec_train_1,yt=y1, clf=clf_a)\n", - "test_classifier(labels=[\"FAKE\",\"REAL\"], title=\"Configuration 1, model a -- test\", Xt=vec_test_1,yt=yt1, clf=clf_a)" + "vectorizer_1 = TfidfVectorizer(stop_words='english', max_df=0.7)\n", + "vec_train_1 = vectorizer_1.fit_transform(X1)\n", + "vec_test_1 = vectorizer_1.transform(Xt1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "* try to get most important features" + "* trying a Random Forest classifier " ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 11, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'score: 0.9960008419280152'\n", + "Confusion matrix, without normalization\n", + "array([[2342, 3],\n", + " [ 16, 2390]])\n", + "'score: 0.8478535353535354'\n", + "Confusion matrix, without normalization\n", + "array([[737, 82],\n", + " [159, 606]])\n" + ] + }, { "data": { + "image/png": "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\n", "text/plain": [ - "'\\ndef most_informative_feature_for_binary_classification(vectorizer, classifier, n=100):\\n \"\"\"\\n See: https://stackoverflow.com/a/26980472\\n \\n Identify most important features if given a vectorizer and binary classifier. Set n to the number\\n of weighted features you would like to show. (Note: current implementation merely prints and does not \\n return top classes.)\\n \"\"\"\\n\\n class_labels = classifier.classes_\\n feature_names = vectorizer.get_feature_names()\\n topn_class1 = sorted(zip(classifier.coef_[0], feature_names))[:n]\\n topn_class2 = sorted(zip(classifier.coef_[0], feature_names))[-n:]\\n \\n l = []\\n \\n for coef, feat in topn_class1:\\n l.append((class_labels[0], coef, feat))\\n\\n display(l)\\n\\n for coef, feat in reversed(topn_class2):\\n l.append((class_labels[1], coef, feat))\\n \\n display(l)\\n\\n\\nmost_informative_feature_for_binary_classification(tfidf_vectorizer_1, linear_clf, n=30)\\n'" + "" ] }, - "execution_count": 16, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "'''\n", - "def most_informative_feature_for_binary_classification(vectorizer, classifier, n=100):\n", - " \"\"\"\n", - " See: https://stackoverflow.com/a/26980472\n", - " \n", - " Identify most important features if given a vectorizer and binary classifier. Set n to the number\n", - " of weighted features you would like to show. (Note: current implementation merely prints and does not \n", - " return top classes.)\n", - " \"\"\"\n", - "\n", - " class_labels = classifier.classes_\n", - " feature_names = vectorizer.get_feature_names()\n", - " topn_class1 = sorted(zip(classifier.coef_[0], feature_names))[:n]\n", - " topn_class2 = sorted(zip(classifier.coef_[0], feature_names))[-n:]\n", - " \n", - " l = []\n", - " \n", - " for coef, feat in topn_class1:\n", - " l.append((class_labels[0], coef, feat))\n", - "\n", - " display(l)\n", - "\n", - " for coef, feat in reversed(topn_class2):\n", - " l.append((class_labels[1], coef, feat))\n", - " \n", - " display(l)\n", - "\n", - "\n", - "most_informative_feature_for_binary_classification(tfidf_vectorizer_1, linear_clf, n=30)\n", - "'''\n" + "from sklearn.ensemble import RandomForestClassifier as RFC\n", + "clf_a = RFC(criterion='entropy', random_state=4222)\n", + "max_size=10000\n", + "clf_a.fit(vec_train_1[:max_size], y1[:max_size])\n", + "test_classifier(labels=[\"FAKE\",\"REAL\"], title=\"Configuration 1, model a -- train\", Xt=vec_train_1,yt=y1, clf=clf_a)\n", + "cm_1 = test_classifier(labels=[\"FAKE\",\"REAL\"], title=\"Configuration 1, model a -- test\", Xt=vec_test_1,yt=yt1, clf=clf_a)" ] }, { @@ -576,7 +526,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -1157,7 +1107,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -1171,58 +1121,106 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ - "vectorizer_2 = CountVectorizer(stop_words='english', max_df=0.7)\n", + "vectorizer_2 = TfidfVectorizer(stop_words='english', max_df=0.7)\n", "vec_train_2 = vectorizer_2.fit_transform(X2)\n", "vec_test_2 = vectorizer_2.transform(Xt2)" ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "clf_b = MultinomialNB()\n", - "clf_b.fit(vec_train_2, y2)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "'score: 0.8760555706891855'\n", + "Object `MLPClassifier` not found.\n" + ] + } + ], + "source": [ + "?MLPClassifier" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* trying a MLP as classifier " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,\n", + " beta_2=0.999, early_stopping=False, epsilon=1e-08,\n", + " hidden_layer_sizes=(100,), learning_rate='constant',\n", + " learning_rate_init=0.001, max_iter=200, momentum=0.9,\n", + " nesterovs_momentum=True, power_t=0.5, random_state=4222,\n", + " shuffle=True, solver='adam', tol=0.0001, validation_fraction=0.1,\n", + " verbose=False, warm_start=False)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.neural_network import MLPClassifier\n", + "clf_b = MLPClassifier(hidden_layer_sizes=(100,), random_state=4222)\n", + "clf_b.fit(vec_train_2, y2)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'score: 0.9997275946608554'\n", "Confusion matrix, without normalization\n", - "'score: 0.6105032822757112'\n", + "array([[1675, 1],\n", + " [ 0, 1995]])\n", + "'score: 0.5776805251641138'\n", "Confusion matrix, without normalization\n", - "'score: 0.6527777777777778'\n", - "Confusion matrix, without normalization\n" + "array([[109, 99],\n", + " [ 94, 155]])\n", + "'score: 0.6041666666666666'\n", + "Confusion matrix, without normalization\n", + "array([[ 92, 77],\n", + " [ 94, 169]])\n" ] }, { "data": { - "image/png": "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\n", "text/plain": [ - "" + "array([[ 92, 77],\n", + " [ 94, 169]])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" ] }, "metadata": {}, @@ -1230,9 +1228,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1240,9 +1238,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1251,7 +1249,7 @@ ], "source": [ "test_classifier(labels=[\"true\", \"false\"], title=\"configuration 2 -- train\", Xt=vec_train_2, yt=y2, clf=clf_b)\n", - "test_classifier(labels=[\"true\", \"false\"], title=\"configuration 2 -- test\", Xt=vec_test_2, yt=yt2, clf=clf_b)\n", + "cm_2 = test_classifier(labels=[\"true\", \"false\"], title=\"configuration 2 -- test\", Xt=vec_test_2, yt=yt2, clf=clf_b)\n", "test_classifier(labels=[\"true\", \"false\"], title=\"configuration 2 -- valid\", Xt=vectorizer_2.transform(Xv2), yt=yv2, clf=clf_b)" ] }, @@ -1265,22 +1263,24 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "'score: 0.4617067833698031'\n", - "Confusion matrix, without normalization\n" + "'score: 0.5142231947483589'\n", + "Confusion matrix, without normalization\n", + "array([[ 7, 201],\n", + " [ 21, 228]])\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1292,7 +1292,7 @@ "yt2_c3[yt2_c3 == \"true\"] = \"REAL\"\n", "yt2_c3[yt2_c3 == \"false\"] = \"FAKE\"\n", "\n", - "test_classifier(labels=[\"REAL\", \"FAKE\"], \n", + "cm_3b=test_classifier(labels=[\"REAL\", \"FAKE\"], \n", " title=\"configuration 3: model a) โ†’ dataset 2\",\n", " Xt=vectorizer_1.transform(Xt2),\n", " yt=yt2_c3, clf=clf_a)" @@ -1300,22 +1300,24 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "'score: 0.4962121212121212'\n", - "Confusion matrix, without normalization\n" + "'score: 0.5391414141414141'\n", + "Confusion matrix, without normalization\n", + "array([[274, 491],\n", + " [239, 580]])\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1327,7 +1329,7 @@ "yt1_c3[yt1_c3 == \"REAL\"] = \"true\"\n", "yt1_c3[yt1_c3 == \"FAKE\"] = \"false\"\n", "\n", - "test_classifier(labels=[\"true\", \"false\"], \n", + "cm_3a=test_classifier(labels=[\"true\", \"false\"], \n", " title=\"configuration 3: model b) โ†’ dataset 1\",\n", " Xt=vectorizer_2.transform(Xt1),\n", " yt=yt1_c3, clf=clf_b)" @@ -1343,7 +1345,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -1378,14 +1380,14 @@ "\n", " print(df3['y'].value_counts())\n", " print('done')\n", - " return train_test_split(df3['claim'], df3['y'], test_size=0.25, random_state=4222)\n", + " return train_test_split(df3['claim'], df3['y'], test_size=0.3, random_state=4222)\n", " except Exception as e:\n", " print(e)" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -1402,7 +1404,7 @@ "6335\n", "-- liar liar\n", "Index(['y', 'claim'], dtype='object')\n", - "{'mostly-true', 'pants-fire', 'half-true', 'barely-true', 'false', 'true'} 10240\n", + "{'pants-fire', 'false', 'mostly-true', 'true', 'barely-true', 'half-true'} 10240\n", "1676\n", "1995\n", "{'true', 'false'} 3671\n", @@ -1419,75 +1421,159 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ - "vectorizer_3 = CountVectorizer(stop_words='english')\n", + "vectorizer_3 = TfidfVectorizer(stop_words='english', max_df=0.7)\n", "vec_train_3 = vectorizer_3.fit_transform(X3)\n", "vec_test_3 = vectorizer_3.transform(Xt3)" ] }, { - "cell_type": "code", - "execution_count": 29, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "clf_3 = MultinomialNB()\n", + "* using MLP again" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "clf_3 = MLPClassifier(hidden_layer_sizes=(16,16), random_state=4222)\n", "clf_3.fit(vec_train_3, y3)" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "'score: 0.8030383795309168'\n", - "Confusion matrix, without normalization\n", - "'score: 0.746203037569944'\n", - "Confusion matrix, without normalization\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "test_classifier(labels=[\"true\",\"false\"], title=\"Configuration 4 -- train\", Xt=vec_train_3, yt=y3, clf=clf_3)\n", - "test_classifier(labels=[\"true\",\"false\"], title=\"Configuration 4 -- test\", Xt=vec_test_3, yt=yt3, clf=clf_3)" + "cm_4=test_classifier(labels=[\"true\",\"false\"], title=\"Configuration 4 -- test\", Xt=vec_test_3, yt=yt3, clf=clf_3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### exporting" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def recall(cm):\n", + " return cm[0,0] / (cm[0,0] + cm[0,1])\n", + "def precision(cm):\n", + " return cm[0,0] / (cm[0,0] + cm[1,0])\n", + "\n", + "def accuracy(cm):\n", + " return (cm[0,0] + cm[1,1]) / np.sum(cm)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from rdflib import Namespace, Graph, Literal\n", + "from rdflib.namespace import DCTERMS, RDF" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class mexcore_graph(object):\n", + " def __init__(self, name_exp):\n", + " self.nsp = {\n", + " \"this\": Namespace(\"http://mex.aksw.org/examples/\"),\n", + " \"xsd\": Namespace(\"http://www.w3.org/2001/XMLSchema#\"),\n", + " \"rdfs\": Namespace(\"http://www.w3.org/2000/01/rdf-schema#\"),\n", + " \"mexcore\": Namespace(\"http://mex.aksw.org/mex-core#\"),\n", + " \"mexperf\": Namespace(\"http://mex.aksw.org/mex-perf#\"),\n", + " \"mexalgo\": Namespace(\"http://mex.aksw.org/mex-algo#\"),\n", + " \"prov\": Namespace(\"http://www.w3.org/ns/prov#\"),\n", + " \"dct\": DCTERMS,\n", + " \"rdf\": RDF\n", + " }\n", + " self.g = Graph()\n", + "\n", + " for i in nsp.items():\n", + " self.g.bind(i[0],i[1])\n", + " \n", + " self.exp = self.nsp[\"this\"][name_exp]\n", + " self.g.add((self.nsp[\"this\"][name_exp], self.nsp[\"rdf\"].type, self.nsp[\"mexcore\"].Experiment))\n", + " \n", + " def add_dataset(self,dset_name):\n", + " self.g.add((self.nsp[\"this\"][dset_name], self.nsp[\"rdf\"].type, self.nsp[\"mexcore\"].dataset))\n", + " self.g.add((self.nsp[\"this\"][dset_name], self.nsp[\"rdfs\"].label, Literal(dset_name)))\n", + " \n", + " \n", + " def add_datasets(self, dset_names):\n", + " for dset_name in dset_names:\n", + " self.add_dataset(dset_name)\n", + " \n", + " def add_model(self, model_name, literal):\n", + " self.g.add((self.nsp[\"this\"][model_name],self.nsp[\"rdf\"].type,self.nsp[\"mexalgo\"].Algorithm))\n", + " self.g.add((self.nsp[\"this\"][model_name],self.nsp[\"rdfs\"].label,Literal(model_name)))\n", + " self.g.add((self.nsp[\"this\"][model_name],self.nsp[\"dct\"].identifier,Literal(literal)))\n", + " \n", + " def add_configuration(self, conf_name, used_model, used_dset):\n", + " self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"rdf\"].type,self.nsp[\"mexcore\"].ExperimentConfiguration))\n", + " self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"rdfs\"].label,Literal(conf_name)))\n", + " self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"prov\"].used, self.nsp[\"this\"][used_model]))\n", + " self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"prov\"].used, self.nsp[\"this\"][used_dset]))\n", + " self.g.add((self.nsp[\"this\"][conf_name],self.nsp[\"prov\"].wasStartedBy, self.exp))\n", + " \n", + " def add_measurement(self, meas_name, used_conf, confusion_matrix):\n", + " self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"rdf\"].type,self.nsp[\"mexcore\"].PerformanceMeasure))\n", + " self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"mexperf\"].precision,Literal(str(precision(confusion_matrix)),datatype=self.nsp[\"xsd\"].float)))\n", + " self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"mexperf\"].recall,Literal(str(recall(confusion_matrix)),datatype=self.nsp[\"xsd\"].float)))\n", + " self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"mexperf\"].accuracy,Literal(str(accuracy(confusion_matrix)),datatype=self.nsp[\"xsd\"].float)))\n", + " self.g.add((self.nsp[\"this\"][meas_name],self.nsp[\"prov\"].wasGeneratedBy,self.nsp[\"this\"][used_conf]))\n", + "\n", + "\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mg = mexcore_graph(\"jonas_weinz_task_2\")\n", + "mg.add_datasets([\"Dataset01\",\"Dataset02\",\"Dataset03\"])\n", + "\n", + "mg.add_model(\"model_a\", \"RandomForestClassifier\")\n", + "mg.add_model(\"model_b\", \"MLPClassifier\")\n", + "mg.add_model(\"model_c\", \"MLPClassifier\")\n", + "\n", + "mg.add_configuration(\"conf1\",\"model_a\",\"Dataset01\")\n", + "mg.add_configuration(\"conf2\",\"model_b\", \"Dataset02\")\n", + "mg.add_configuration(\"conf3a\",\"model_b\", \"Dataset01\")\n", + "mg.add_configuration(\"conf3b\", \"model_a\", \"Dataset02\")\n", + "mg.add_configuration(\"conf4\", \"model_c\", \"Dataset03\")\n", + "\n", + "mg.add_measurement(\"measure1\", \"conf1\", cm_1)\n", + "mg.add_measurement(\"measure2\", \"conf2\", cm_2)\n", + "mg.add_measurement(\"measure3a\", \"conf3a\", cm_3a)\n", + "mg.add_measurement(\"measure3b\", \"conf3b\", cm_3b)\n", + "mg.add_measurement(\"measure4\", \"conf4\", cm_4)\n", + "\n", + "mg.g.serialize(destination='output.ttl', format='turtle')" ] }, { diff --git a/Jonas_Solutions/Task_03.ipynb b/Jonas_Solutions/Task_03.ipynb new file mode 100644 index 0000000..af6ec4e --- /dev/null +++ b/Jonas_Solutions/Task_03.ipynb @@ -0,0 +1,316 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jonas/.local/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", + " from ._conv import register_converters as _register_converters\n", + "Using TensorFlow backend.\n" + ] + } + ], + "source": [ + "import numpy as np \n", + "import pandas as pd \n", + "from sklearn.feature_extraction.text import CountVectorizer\n", + "from keras.preprocessing.text import Tokenizer\n", + "from keras.preprocessing.sequence import pad_sequences\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D\n", + "from sklearn.model_selection import train_test_split\n", + "from keras.utils.np_utils import to_categorical\n", + "import re\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ">**Task 3**: playing with NN framwork/keras and basic sentiment analysis\n", + ">- use the following model as a baseline and improve it!\n", + ">- export your metadata (just basic hyperparameters and outcomes for test data!)\n", + ">- test data = 0.3 (not in this example, change it!)\n", + ">- random_state = 4222\n", + ">- no need to cross-validation!\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dataset already downloaded\n" + ] + } + ], + "source": [ + "%%bash\n", + "\n", + "if [ ! -e 'dataset_sentiment.csv' ]\n", + "then\n", + " echo \"downloading dataset\"\n", + " wget https://raw.githubusercontent.com/SmartDataAnalytics/MA-INF-4222-NLP-Lab/master/2018_SoSe/exercises/dataset_sentiment.csv\n", + "else\n", + " echo \"dataset already downloaded\"\n", + "fi" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# parameters\n", + "max_fatures = 500\n", + "embed_dim = 128\n", + "lstm_out = 196\n", + "dropout = 0.1\n", + "dropout_1d = 0.4\n", + "recurrent_dropout = 0.1\n", + "random_state = 1324\n", + "validation_size = 1000\n", + "batch_size = 16\n", + "epochs=2\n", + "verbose= 2" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " text sentiment\n", + "0 RT @NancyLeeGrahn: How did everyone feel about... Neutral\n", + "1 RT @ScottWalker: Didn't catch the full #GOPdeb... Positive\n", + "2 RT @TJMShow: No mention of Tamir Rice and the ... Neutral\n", + "3 RT @RobGeorge: That Carly Fiorina is trending ... Positive\n", + "4 RT @DanScavino: #GOPDebate w/ @realDonaldTrump... Positive\n", + "5 RT @GregAbbott_TX: @TedCruz: \"On my first day ... Positive\n", + "6 RT @warriorwoman91: I liked her and was happy ... Negative\n", + "7 Going on #MSNBC Live with @ThomasARoberts arou... Neutral\n", + "8 Deer in the headlights RT @lizzwinstead: Ben C... Negative\n", + "9 RT @NancyOsborne180: Last night's debate prove... Negative\n" + ] + } + ], + "source": [ + "df = pd.read_csv('dataset_sentiment.csv')\n", + "df = df[['text','sentiment']]\n", + "print(df[0:10])\n", + "\n", + "df = df[df.sentiment != \"Neutral\"]\n", + "df['text'] = df['text'].apply(lambda x: x.lower())\n", + "df['text'] = df['text'].apply(lambda x: x.replace('rt',' '))\n", + "df['text'] = df['text'].apply((lambda x: re.sub('[^a-zA-Z0-9\\s]','',x)))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "tok = Tokenizer(num_words=max_fatures, split=' ')\n", + "tok.fit_on_texts(df['text'].values)\n", + "X = tok.texts_to_sequences(df['text'].values)\n", + "X = pad_sequences(X)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "embedding_2 (Embedding) (None, 26, 128) 64000 \n", + "_________________________________________________________________\n", + "spatial_dropout1d_2 (Spatial (None, 26, 128) 0 \n", + "_________________________________________________________________\n", + "lstm_2 (LSTM) (None, 196) 254800 \n", + "_________________________________________________________________\n", + "dense_2 (Dense) (None, 2) 394 \n", + "=================================================================\n", + "Total params: 319,194\n", + "Trainable params: 319,194\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "None\n" + ] + } + ], + "source": [ + "nn = Sequential()\n", + "nn.add(Embedding(max_fatures, embed_dim, input_length = X.shape[1]))\n", + "nn.add(SpatialDropout1D(dropout_1d))\n", + "nn.add(LSTM(lstm_out, dropout=dropout, recurrent_dropout=recurrent_dropout))\n", + "nn.add(Dense(2, activation='softmax'))\n", + "nn.compile(loss = 'categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])\n", + "print(nn.summary())" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/2\n", + " - 21s - loss: 0.4322 - acc: 0.8196\n", + "Epoch 2/2\n", + " - 25s - loss: 0.3612 - acc: 0.8509\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Y = pd.get_dummies(df['sentiment']).values\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.30, random_state = random_state)\n", + "nn.fit(X_train, Y_train, epochs = epochs, batch_size=batch_size, verbose=verbose)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "score: 0.37\n", + "acc: 0.84\n" + ] + } + ], + "source": [ + "X_validate = X_test[-validation_size:]\n", + "Y_validate = Y_test[-validation_size:]\n", + "X_test = X_test[:-validation_size]\n", + "Y_test = Y_test[:-validation_size]\n", + "score, accuracy = nn.evaluate(X_test, Y_test, verbose = 2, batch_size = batch_size)\n", + "print(\"score: %.2f\" % (score))\n", + "print(\"acc: %.2f\" % (accuracy))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "pos_cnt, neg_cnt, pos_ok, neg_ok = 0, 0, 0, 0\n", + "for x in range(len(X_validate)):\n", + " result = nn.predict(X_validate[x].reshape(1,X_test.shape[1]),batch_size=1,verbose = 2)[0]\n", + " if np.argmax(result) == np.argmax(Y_validate[x]):\n", + " if np.argmax(Y_validate[x]) == 0: neg_ok += 1\n", + " else: pos_ok += 1\n", + " if np.argmax(Y_validate[x]) == 0: neg_cnt += 1\n", + " else: pos_cnt += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pos_acc 39.58333333333333 %\n", + "neg_acc 95.29702970297029 %\n" + ] + } + ], + "source": [ + "print(\"pos_acc\", pos_ok/pos_cnt*100, \"%\")\n", + "print(\"neg_acc\", neg_ok/neg_cnt*100, \"%\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 37\n", + " 311 189 4 144 22 16 1 281]]\n", + "[0.8364928 0.16350722]\n" + ] + } + ], + "source": [ + "X2 = ['what are u going to say about that? the truth, wassock?!']\n", + "X2 = tok.texts_to_sequences(X2)\n", + "X2 = pad_sequences(X2, maxlen=26, dtype='int32', value=0)\n", + "print(X2)\n", + "print(nn.predict(X2, batch_size=1, verbose = 2)[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Jonas_Solutions/output.ttl b/Jonas_Solutions/output.ttl new file mode 100644 index 0000000..41dfcb2 --- /dev/null +++ b/Jonas_Solutions/output.ttl @@ -0,0 +1,94 @@ +@prefix dct: . +@prefix mexalgo: . +@prefix mexcore: . +@prefix mexperf: . +@prefix prov: . +@prefix rdf: . +@prefix rdfs: . +@prefix this: . +@prefix xml: . +@prefix xsd: . + +this:measure1 a mexcore:PerformanceMeasure ; + mexperf:accuracy "0.8478535353535354"^^xsd:float ; + mexperf:precision "0.8225446428571429"^^xsd:float ; + mexperf:recall "0.8998778998778999"^^xsd:float ; + prov:wasGeneratedBy this:conf1 . + +this:measure2 a mexcore:PerformanceMeasure ; + mexperf:accuracy "0.5776805251641138"^^xsd:float ; + mexperf:precision "0.5369458128078818"^^xsd:float ; + mexperf:recall "0.5240384615384616"^^xsd:float ; + prov:wasGeneratedBy this:conf2 . + +this:measure3a a mexcore:PerformanceMeasure ; + mexperf:accuracy "0.5391414141414141"^^xsd:float ; + mexperf:precision "0.5341130604288499"^^xsd:float ; + mexperf:recall "0.3581699346405229"^^xsd:float ; + prov:wasGeneratedBy this:conf3a . + +this:measure3b a mexcore:PerformanceMeasure ; + mexperf:accuracy "0.5142231947483589"^^xsd:float ; + mexperf:precision "0.25"^^xsd:float ; + mexperf:recall "0.03365384615384615"^^xsd:float ; + prov:wasGeneratedBy this:conf3b . + +this:measure4 a mexcore:PerformanceMeasure ; + mexperf:accuracy "0.7714856762158561"^^xsd:float ; + mexperf:precision "0.7680865449628127"^^xsd:float ; + mexperf:recall "0.7680865449628127"^^xsd:float ; + prov:wasGeneratedBy this:conf4 . + +this:Dataset03 a mexcore:dataset ; + rdfs:label "Dataset03" . + +this:conf1 a mexcore:ExperimentConfiguration ; + rdfs:label "conf1" ; + prov:used this:Dataset01, + this:model_a ; + prov:wasStartedBy this:jonas_weinz_task_2 . + +this:conf2 a mexcore:ExperimentConfiguration ; + rdfs:label "conf2" ; + prov:used this:Dataset02, + this:model_b ; + prov:wasStartedBy this:jonas_weinz_task_2 . + +this:conf3a a mexcore:ExperimentConfiguration ; + rdfs:label "conf3a" ; + prov:used this:Dataset01, + this:model_b ; + prov:wasStartedBy this:jonas_weinz_task_2 . + +this:conf3b a mexcore:ExperimentConfiguration ; + rdfs:label "conf3b" ; + prov:used this:Dataset02, + this:model_a ; + prov:wasStartedBy this:jonas_weinz_task_2 . + +this:conf4 a mexcore:ExperimentConfiguration ; + rdfs:label "conf4" ; + prov:used this:Dataset03, + this:model_c ; + prov:wasStartedBy this:jonas_weinz_task_2 . + +this:model_c a mexalgo:Algorithm ; + rdfs:label "model_c" ; + dct:identifier "MLPClassifier" . + +this:Dataset01 a mexcore:dataset ; + rdfs:label "Dataset01" . + +this:Dataset02 a mexcore:dataset ; + rdfs:label "Dataset02" . + +this:model_a a mexalgo:Algorithm ; + rdfs:label "model_a" ; + dct:identifier "RandomForestClassifier" . + +this:model_b a mexalgo:Algorithm ; + rdfs:label "model_b" ; + dct:identifier "MLPClassifier" . + +this:jonas_weinz_task_2 a mexcore:Experiment . + diff --git a/Project/Tools/emoji tester old.ipynb b/Project/Tools/emoji tester old.ipynb new file mode 100644 index 0000000..054473e --- /dev/null +++ b/Project/Tools/emoji tester old.ipynb @@ -0,0 +1,423 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from IPython.display import clear_output, Markdown, Math\n", + "import ipywidgets as widgets\n", + "import os" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "## file input stuff:\n", + "\n", + "* replace `test.txt` with yout whatsapp log file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "./whatsapp2csv.sh test.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* read table `test.csv` exported by `whatsapp2csv.sh`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "messages = pd.read_csv('test.txt.csv', delimiter='\\t')\n", + "messages.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* read emoji-data (can be found here: https://www.unicode.org/Public/emoji/11.0/emoji-data.txt) and generate a table file out of it" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "if [ ! -e emoji-data.txt ]\n", + "then\n", + " echo \"downloading emoji specification\"\n", + " wget https://www.unicode.org/Public/emoji/11.0/emoji-data.txt\n", + "else\n", + " echo \"found existing emoji specification\"\n", + "fi\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "emoji_blacklist = set([\n", + " 0x1F3FB,\n", + " 0x1F3FC,\n", + " 0x1F3FD,\n", + " 0x1F3FE,\n", + " 0x1F3FF\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "emoji_data = pd.read_csv('emoji-data.txt', delimiter=';', comment='#', names=[\"unicode\",\"type\"])\n", + "emoji_data['type'] = emoji_data['type'].str.strip()\n", + "emoji_data = emoji_data[emoji_data['type'] == \"Emoji_Presentation\"]\n", + "emoji_data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* now build a set out of the unicode types" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ord(\"๐Ÿ˜€\") == int('0x1f600',16)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "emoji_codes = emoji_data['unicode']\n", + "emoji_codes.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* we have to iterate over the whole list and extract all given ranges:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "emoji_code_list = []\n", + "for entry in emoji_codes:\n", + " # testing whether we have an entry or a range:\n", + " if '.' in entry:\n", + " # range\n", + " a,b = entry.split(\"..\")\n", + " for i in range(int(a,16),int(b,16) +1):\n", + " if i not in emoji_blacklist:\n", + " emoji_code_list.append(i)\n", + " else:\n", + " # single entry\n", + " if i not in emoji_blacklist:\n", + " emoji_code_list.append(int(entry,16))\n", + "emoji_code_set = set(emoji_code_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# simple test:\n", + "print(ord(\"๐Ÿ˜€\") in emoji_code_set, ord(\"a\") in emoji_code_set)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* expanding column and fill new emojis" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "messages[\"emojis\"] = None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in messages.index:\n", + " emoji_list = []\n", + " to_remove = []\n", + " m = messages.iloc[i]['message']\n", + " for c in str(m):\n", + " if ord(c) in emoji_code_set:\n", + " emoji_list.append(c)\n", + " elif ord(c) in emoji_blacklist:\n", + " to_remove.append(c)\n", + " \n", + " messages.loc[i,'emojis'] = emoji_list\n", + " #remove emiรณjis from message\n", + " for e in (emoji_list + to_remove):\n", + " m = m.replace(e,\"\")\n", + " messages.loc[i,'message'] = m\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "messages[:20]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* get a list only containing messaged with emojis" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "emoji_messages = messages[[True if len(e) > 0 else False for e in messages['emojis']]]\n", + "emoji_messages = emoji_messages[emoji_messages['message'] != \"\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "display(emoji_messages)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "## learning part" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import itertools\n", + "import sklearn.utils as sku\n", + "from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, HashingVectorizer\n", + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "labels=[e[-1] for e in emoji_messages['emojis']]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "labels[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "X1, Xt1, y1, yt1 = train_test_split(emoji_messages['message'], labels, test_size=0.1, random_state=4222)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vectorizer = TfidfVectorizer(stop_words='english')\n", + "vec_train = vectorizer.fit_transform(X1)\n", + "vec_test = vectorizer.transform(Xt1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.ensemble import RandomForestClassifier as RFC\n", + "from sklearn.neural_network import MLPClassifier as MLP\n", + "from sklearn.naive_bayes import MultinomialNB as MNB\n", + "#clf_a = RFC(criterion='entropy', random_state=4222)\n", + "clf_a = MLP()\n", + "clf_a.fit(vec_train, y1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pred = clf_a.predict(vectorizer.transform(Xt1))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "testlist = pd.DataFrame({'message': Xt1, 'pred': pred, 'trained': yt1})\n", + "testlist = pd.merge(testlist, emoji_messages['emojis'].to_frame(), left_index=True, right_index=True)\n", + "testlist.to_csv('export.csv')\n", + "testlist" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "display(clf_a.predict(vectorizer.transform([\"Boah Caner\"]))[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(chr(0x1F3F))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vec_train[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "out = widgets.Output()\n", + "\n", + "t = widgets.Text()\n", + "b = widgets.Button(\n", + " description='get smiley',\n", + " disabled=False,\n", + " button_style='', # 'success', 'info', 'warning', 'danger' or ''\n", + " tooltip='Click me',\n", + " icon='check'\n", + ")\n", + "\n", + "\n", + "\n", + "def handle_submit(sender):\n", + " with out:\n", + " clear_output()\n", + " with out:\n", + " display(Markdown(\"# \" + str(clf_a.predict(vectorizer.transform([t.value]))[0])))\n", + "\n", + "b.on_click(handle_submit)\n", + " \n", + "display(t)\n", + "display(widgets.VBox([b, out])) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Project/Tools/emoji tester.ipynb b/Project/Tools/emoji tester.ipynb new file mode 100644 index 0000000..e47d039 --- /dev/null +++ b/Project/Tools/emoji tester.ipynb @@ -0,0 +1,676 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from IPython.display import clear_output, Markdown, Math\n", + "import ipywidgets as widgets\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def create_widgets(t_text, b_text, out, additional_widgets=[]):\n", + " texts = []\n", + " for t in t_text:\n", + " texts.append(widgets.Text(t))\n", + " \n", + " button = widgets.Button(\n", + " description=b_text,\n", + " disabled=False,\n", + " button_style='', # 'success', 'info', 'warning', 'danger' or ''\n", + " tooltip=b_text,\n", + " icon='check'\n", + " )\n", + " display(widgets.VBox([widgets.HBox(texts + additional_widgets + [button]), out]))\n", + " return texts + [button]\n", + "\n", + "out_convert = widgets.Output()\n", + "out_build = widgets.Output()\n", + "out_train = widgets.Output()\n", + "out_save = widgets.Output()\n", + "out_read = widgets.Output()\n", + "out_test = widgets.Output()\n", + "\n", + "def mp(msg):\n", + " display(Markdown(msg))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Emoji Tester\n", + "\n", + "just run all cells at first. Then select on of the actions below." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "## converting plain whatsapp export to csv" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8c94a8d3b3724ad08359817b2086cf85", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(HBox(children=(Text(value='test.txt'), Button(description='convert whatsapp file to csv', icon='check', style=ButtonStyle(), tooltip='convert whatsapp file to csv'))), Output()))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## read csv and build database" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ee22e300097e49f1ac24b11662f7dc69", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(HBox(children=(Text(value='test.txt.csv'), Checkbox(value=False, description='using only last emoji'), Button(description='read', icon='check', style=ButtonStyle(), tooltip='read'))), Output()))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## Train" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "de06136ee346492d80ef39d304cbc31c", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(HBox(children=(Dropdown(description='Learning Method', index=1, options=('DecisionTree', 'MLP', 'RandomForest'), value='MLP'), Checkbox(value=False, description='Using one vs all (very slow, only with multi-label!)'), Button(description='train', icon='check', style=ButtonStyle(), tooltip='train'))), Output()))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## save trained classifier" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b046f3ada7ec4ba7a17965d718552d21", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(HBox(children=(Text(value='clf.pkl'), Text(value='mlb.pkl'), Text(value='vectorizer.pkl'), Button(description='save classifier', icon='check', style=ButtonStyle(), tooltip='save classifier'))), Output()))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## import trained classifier" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ac4054e75d8a4214ad040b1b21d6c925", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(HBox(children=(Text(value='clf.pkl'), Text(value='mlb.pkl'), Text(value='vectorizer.pkl'), Button(description='import classifier', icon='check', style=ButtonStyle(), tooltip='import classifier'))), Output()))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## predict emoji on custom text" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "db631acbe9c94cac907efaf501a69c6a", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(HBox(children=(Text(value=''), Checkbox(value=False, description='Show probabilities (only on trees)'), Button(description='get emoji', icon='check', style=ButtonStyle(), tooltip='get emoji'))), Output()))" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mp(\"## converting plain whatsapp export to csv\")\n", + "t_convert, b_convert = create_widgets([\"test.txt\"], \"convert whatsapp file to csv\", out_convert)\n", + "mp(\"## read csv and build database\")\n", + "single_label = widgets.Checkbox(value=False, description='using only last emoji', disable=False)\n", + "t_build, b_build = create_widgets([\"test.txt.csv\"], \"read\", out_build, [single_label])\n", + "mp(\"## Train\")\n", + "d = widgets.Dropdown(options=['DecisionTree', 'MLP', 'RandomForest'], value='MLP', description='Learning Method', disabled=False)\n", + "ova = widgets.Checkbox(value=False, description='Using one vs all (very slow, only with multi-label!)', disabled=False)\n", + "b_train = button = widgets.Button(description=\"train\", disabled=False, button_style='', tooltip=\"train\",icon='check')\n", + "display(widgets.VBox([widgets.HBox([d,ova,b_train]), out_train]))\n", + "mp(\"## save trained classifier\")\n", + "t_save_c, t_save_m, t_save_v, b_save = create_widgets([\"clf.pkl\", \"mlb.pkl\", \"vectorizer.pkl\"], \"save classifier\", out_save)\n", + "mp(\"## import trained classifier\")\n", + "t_read_c, t_read_m, t_read_v, b_read = create_widgets([\"clf.pkl\", \"mlb.pkl\", \"vectorizer.pkl\"], \"import classifier\", out_read)\n", + "mp(\"## predict emoji on custom text\")\n", + "b_prop = widgets.Checkbox(value=False, description='Show probabilities (only on trees)', disabled=False)\n", + "t_test, b_test = create_widgets([\"\"], \"get emoji\", out_test,[b_prop])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "## Code Section:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def convert(b):\n", + " with out_convert:\n", + " clear_output()\n", + " with out_convert:\n", + " mp(\"**converting \" + t_convert.value + \"โ€ฆ**\")\n", + " import subprocess\n", + " print(str(subprocess.check_output([\"./whatsapp2csv.sh\", t_convert.value])).strip())\n", + " mp(\"**done**\")\n", + "\n", + "b_convert.on_click(convert)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* download emoji specification if not already existing" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "found existing emoji specification\n" + ] + } + ], + "source": [ + "%%bash\n", + "if [ ! -e emoji-data.txt ]\n", + "then\n", + " echo \"downloading emoji specification\"\n", + " wget https://www.unicode.org/Public/emoji/11.0/emoji-data.txt\n", + "else\n", + " echo \"found existing emoji specification\"\n", + "fi\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* stuff for creating emoji database" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "emoji_blacklist = set([\n", + " 0x1F3FB,\n", + " 0x1F3FC,\n", + " 0x1F3FD,\n", + " 0x1F3FE,\n", + " 0x1F3FF,\n", + " 0x2642,\n", + " 0x2640\n", + "])\n", + "\n", + "emoji_code_set = None\n", + "\n", + "def create_emoji_set():\n", + " global emoji_code_set\n", + " \n", + " emoji_data = pd.read_csv('emoji-data.txt', delimiter=';', comment='#', names=[\"unicode\",\"type\"])\n", + " emoji_data['type'] = emoji_data['type'].str.strip()\n", + " emoji_data = emoji_data[emoji_data['type'] == \"Emoji_Presentation\"]\n", + " \n", + " emoji_codes = emoji_data['unicode']\n", + " emoji_codes.head()\n", + " \n", + " emoji_code_list = []\n", + " for entry in emoji_codes:\n", + " # testing whether we have an entry or a range:\n", + " if '.' in entry:\n", + " # range\n", + " a,b = entry.split(\"..\")\n", + " for i in range(int(a,16),int(b,16) +1):\n", + " if i not in emoji_blacklist:\n", + " emoji_code_list.append(i)\n", + " else:\n", + " # single entry\n", + " if i not in emoji_blacklist:\n", + " emoji_code_list.append(int(entry,16))\n", + " emoji_code_set = set(emoji_code_list)\n", + " display(Markdown(\"**imported Emojis** (without modifier):\\n>\" + \"\".join([chr(x) for x in emoji_code_set])))\n", + " display(Markdown(\"**blacklisted Emojis:**\\n>\" + \"\".join([chr(x) for x in emoji_blacklist])))\n", + " f = open('emoji-list.txt', 'w')\n", + " for e in emoji_code_set:\n", + " f.write(chr(e) + \"\\n\")\n", + " f.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* stuff for reading whatsapp messages" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "messages = None\n", + "vectorizer = None\n", + "clf_a = None\n", + "mlb = None\n", + "\n", + "emoji_messages=None" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def read_message_and_build_db(filename):\n", + " global messages\n", + " global emoji_messages\n", + " global vectorizer\n", + " global clf_a\n", + " global mlb\n", + " \n", + " messages = pd.read_csv(filename, delimiter='\\t')\n", + " mp(\"**filter messages and creating labels. This can take a while...**\")\n", + " messages[\"emojis\"] = None\n", + " \n", + " msg_batchsize = 1000\n", + " msg_counter = 0\n", + " \n", + " for i in messages.index:\n", + " \n", + " msg_counter+=1\n", + " if msg_counter >= msg_batchsize:\n", + " print(str(100 * i / messages.shape[0]) + \"%\")\n", + " msg_counter=0\n", + " \n", + " emoji_list = []\n", + " m = messages.iloc[i]['message']\n", + " m_new = \"\"\n", + " for c in str(m):\n", + " if ord(c) in emoji_code_set:\n", + " emoji_list.append(c)\n", + " elif ord(c) not in emoji_blacklist:\n", + " m_new += c\n", + " # if single label: only use last found emoji\n", + " messages.loc[i,'emojis'] = set(emoji_list) if (not single_label.value) or len(emoji_list)==0 else set(emoji_list[-1])\n", + " #remove emiรณjis from message\n", + " messages.loc[i,'message'] = m_new\n", + " \n", + " emoji_messages = messages[[True if len(e) > 0 else False for e in messages['emojis']]]\n", + " emoji_messages = emoji_messages[emoji_messages['message'] != \"\"]\n", + " \n", + " mp(\"**Done**\")\n", + " \n", + " display(emoji_messages)\n", + "\n", + "def train(b):\n", + " global messages\n", + " global emoji_messages\n", + " global vectorizer\n", + " global clf_a\n", + " global mlb\n", + " with out_train:\n", + " clear_output()\n", + " # train part:\n", + " import numpy as np\n", + " import itertools\n", + " import sklearn.utils as sku\n", + " from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, HashingVectorizer\n", + " from sklearn.model_selection import train_test_split\n", + " from sklearn.preprocessing import MultiLabelBinarizer\n", + "\n", + " mlb = MultiLabelBinarizer() if not single_label.value else None\n", + " \n", + " if not mlb:\n", + " l = [list(e)[-1] for e in emoji_messages['emojis']]\n", + " \n", + " labels=mlb.fit_transform(emoji_messages['emojis']) if mlb else l\n", + " \n", + " if mlb:\n", + " display(Markdown(\"**emojis contained in Dataset:**\\n >\" + \"\".join(mlb.classes_ )))\n", + " else:\n", + " display(Markdown(\"**emojis contained in Dataset:**\\n >\" + \"\".join(set(l))))\n", + "\n", + " X1, Xt1, y1, yt1 = train_test_split(emoji_messages['message'], labels, test_size=0.1, random_state=4222)\n", + "\n", + " vectorizer = TfidfVectorizer(stop_words='english')\n", + " vec_train = vectorizer.fit_transform(X1)\n", + " vec_test = vectorizer.transform(Xt1)\n", + "\n", + " mp(\"**train classifier. This can take a very long timeโ€ฆ Grab a coffe! ๐Ÿ˜€**\")\n", + "\n", + " from sklearn.ensemble import RandomForestClassifier as RFC\n", + " from sklearn.neural_network import MLPClassifier as MLP\n", + " #from sklearn.naive_bayes import MultinomialNB as MNB\n", + " from sklearn.tree import DecisionTreeClassifier as DTC\n", + " from sklearn.multiclass import OneVsRestClassifier as OVRC\n", + " clf_a = None\n", + " if (d.value == \"DecisionTree\"):\n", + " clf_a = DTC()\n", + " elif d.value == \"MLP\":\n", + " clf_a = MLP(hidden_layer_sizes=(64,))\n", + " elif d.value == \"RandomForest\":\n", + " RFC(criterion='entropy', random_state=4222)\n", + "\n", + " if ova.value:\n", + " clf_a=OVRC(clf_a)\n", + "\n", + " display(clf_a)\n", + " clf_a.fit(vec_train, y1)\n", + "\n", + " mp(\"**training done**\")\n", + "\n", + " pred = clf_a.predict(vectorizer.transform(Xt1))\n", + "\n", + " testlist = pd.DataFrame({'message': Xt1, 'pred': mlb.inverse_transform(pred) if mlb else pred, 'teacher': mlb.inverse_transform(yt1) if mlb else yt1})\n", + " testlist.to_csv('export.csv')\n", + " display(testlist)\n", + " \n", + "def build_db(b):\n", + " with out_build:\n", + " clear_output()\n", + " create_emoji_set()\n", + " read_message_and_build_db(t_build.value)\n", + "b_build.on_click(build_db)\n", + "b_train.on_click(train)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.externals import joblib\n", + "def write_to_file(b):\n", + " global vectorizer\n", + " global clf_a\n", + " global mlb\n", + " \n", + " with out_save:\n", + " clear_output()\n", + " mp(\"**write to file...**\")\n", + " joblib.dump(clf_a, t_save_c.value)\n", + " if mlb:\n", + " joblib.dump(mlb, t_save_m.value) \n", + " joblib.dump(vectorizer, t_save_v.value)\n", + " mp(\"**done**\")\n", + "b_save.on_click(write_to_file)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def read_from_file(b):\n", + " global vectorizer\n", + " global clf_a\n", + " global mlb\n", + " \n", + " with out_read:\n", + " clear_output()\n", + " mp(\"**read from fileโ€ฆ**\")\n", + " clf_a = joblib.load(t_read_c.value)\n", + " if t_read_m.value != \"\":\n", + " mlb = joblib.load(t_read_m.value)\n", + " else:\n", + " mlb = None\n", + " vectorizer = joblib.load(t_read_v.value)\n", + " mp(\"**done**\")\n", + "b_read.on_click(read_from_file)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "def predict(b):\n", + " with out_test:\n", + " clear_output()\n", + " v = mlb.inverse_transform(clf_a.predict(vectorizer.transform([t_test.value])))[0] if mlb else clf_a.predict(vectorizer.transform([t_test.value]))[0]\n", + " mp(\"**prediction:**\\n# \" + (\"\".join(v) if len(v)>0 else \" \"))\n", + " if b_prop.value:\n", + " pred = clf_a.predict_proba(vectorizer.transform([t_test.value]))\n", + " print(mlb.inverse_transform(pred))\n", + "\n", + "b_test.on_click(predict)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Project/Tools/emoji-data.txt b/Project/Tools/emoji-data.txt new file mode 100644 index 0000000..6e66455 --- /dev/null +++ b/Project/Tools/emoji-data.txt @@ -0,0 +1,714 @@ +# emoji-data.txt +# Date: 2018-02-07, 07:55:18 GMT +# ยฉ 2018 Unicodeยฎ, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Emoji Data for UTS #51 +# Version: 11.0 +# +# For documentation and usage, see http://www.unicode.org/reports/tr51 +# +# Format: +# ; # +# Note: there is no guarantee as to the structure of whitespace or comments +# +# Characters and sequences are listed in code point order. Users should be shown a more natural order. +# See the CLDR collation order for Emoji. + + +# ================================================ + +# All omitted code points have Emoji=No +# @missing: 0000..10FFFF ; Emoji ; No + +0023 ; Emoji # 1.1 [1] (#๏ธ) number sign +002A ; Emoji # 1.1 [1] (*๏ธ) asterisk +0030..0039 ; Emoji # 1.1 [10] (0๏ธ..9๏ธ) digit zero..digit nine +00A9 ; Emoji # 1.1 [1] (ยฉ๏ธ) copyright +00AE ; Emoji # 1.1 [1] (ยฎ๏ธ) registered +203C ; Emoji # 1.1 [1] (โ€ผ๏ธ) double exclamation mark +2049 ; Emoji # 3.0 [1] (โ‰๏ธ) exclamation question mark +2122 ; Emoji # 1.1 [1] (โ„ข๏ธ) trade mark +2139 ; Emoji # 3.0 [1] (โ„น๏ธ) information +2194..2199 ; Emoji # 1.1 [6] (โ†”๏ธ..โ†™๏ธ) left-right arrow..down-left arrow +21A9..21AA ; Emoji # 1.1 [2] (โ†ฉ๏ธ..โ†ช๏ธ) right arrow curving left..left arrow curving right +231A..231B ; Emoji # 1.1 [2] (โŒš..โŒ›) watch..hourglass done +2328 ; Emoji # 1.1 [1] (โŒจ๏ธ) keyboard +23CF ; Emoji # 4.0 [1] (โ๏ธ) eject button +23E9..23F3 ; Emoji # 6.0 [11] (โฉ..โณ) fast-forward button..hourglass not done +23F8..23FA ; Emoji # 7.0 [3] (โธ๏ธ..โบ๏ธ) pause button..record button +24C2 ; Emoji # 1.1 [1] (โ“‚๏ธ) circled M +25AA..25AB ; Emoji # 1.1 [2] (โ–ช๏ธ..โ–ซ๏ธ) black small square..white small square +25B6 ; Emoji # 1.1 [1] (โ–ถ๏ธ) play button +25C0 ; Emoji # 1.1 [1] (โ—€๏ธ) reverse button +25FB..25FE ; Emoji # 3.2 [4] (โ—ป๏ธ..โ—พ) white medium square..black medium-small square +2600..2604 ; Emoji # 1.1 [5] (โ˜€๏ธ..โ˜„๏ธ) sun..comet +260E ; Emoji # 1.1 [1] (โ˜Ž๏ธ) telephone +2611 ; Emoji # 1.1 [1] (โ˜‘๏ธ) ballot box with check +2614..2615 ; Emoji # 4.0 [2] (โ˜”..โ˜•) umbrella with rain drops..hot beverage +2618 ; Emoji # 4.1 [1] (โ˜˜๏ธ) shamrock +261D ; Emoji # 1.1 [1] (โ˜๏ธ) index pointing up +2620 ; Emoji # 1.1 [1] (โ˜ ๏ธ) skull and crossbones +2622..2623 ; Emoji # 1.1 [2] (โ˜ข๏ธ..โ˜ฃ๏ธ) radioactive..biohazard +2626 ; Emoji # 1.1 [1] (โ˜ฆ๏ธ) orthodox cross +262A ; Emoji # 1.1 [1] (โ˜ช๏ธ) star and crescent +262E..262F ; Emoji # 1.1 [2] (โ˜ฎ๏ธ..โ˜ฏ๏ธ) peace symbol..yin yang +2638..263A ; Emoji # 1.1 [3] (โ˜ธ๏ธ..โ˜บ๏ธ) wheel of dharma..smiling face +2640 ; Emoji # 1.1 [1] (โ™€๏ธ) female sign +2642 ; Emoji # 1.1 [1] (โ™‚๏ธ) male sign +2648..2653 ; Emoji # 1.1 [12] (โ™ˆ..โ™“) Aries..Pisces +265F..2660 ; Emoji # 1.1 [2] (โ™Ÿ๏ธ..โ™ ๏ธ) chess pawn..spade suit +2663 ; Emoji # 1.1 [1] (โ™ฃ๏ธ) club suit +2665..2666 ; Emoji # 1.1 [2] (โ™ฅ๏ธ..โ™ฆ๏ธ) heart suit..diamond suit +2668 ; Emoji # 1.1 [1] (โ™จ๏ธ) hot springs +267B ; Emoji # 3.2 [1] (โ™ป๏ธ) recycling symbol +267E..267F ; Emoji # 4.1 [2] (โ™พ๏ธ..โ™ฟ) infinity..wheelchair symbol +2692..2697 ; Emoji # 4.1 [6] (โš’๏ธ..โš—๏ธ) hammer and pick..alembic +2699 ; Emoji # 4.1 [1] (โš™๏ธ) gear +269B..269C ; Emoji # 4.1 [2] (โš›๏ธ..โšœ๏ธ) atom symbol..fleur-de-lis +26A0..26A1 ; Emoji # 4.0 [2] (โš ๏ธ..โšก) warning..high voltage +26AA..26AB ; Emoji # 4.1 [2] (โšช..โšซ) white circle..black circle +26B0..26B1 ; Emoji # 4.1 [2] (โšฐ๏ธ..โšฑ๏ธ) coffin..funeral urn +26BD..26BE ; Emoji # 5.2 [2] (โšฝ..โšพ) soccer ball..baseball +26C4..26C5 ; Emoji # 5.2 [2] (โ›„..โ›…) snowman without snow..sun behind cloud +26C8 ; Emoji # 5.2 [1] (โ›ˆ๏ธ) cloud with lightning and rain +26CE ; Emoji # 6.0 [1] (โ›Ž) Ophiuchus +26CF ; Emoji # 5.2 [1] (โ›๏ธ) pick +26D1 ; Emoji # 5.2 [1] (โ›‘๏ธ) rescue workerโ€™s helmet +26D3..26D4 ; Emoji # 5.2 [2] (โ›“๏ธ..โ›”) chains..no entry +26E9..26EA ; Emoji # 5.2 [2] (โ›ฉ๏ธ..โ›ช) shinto shrine..church +26F0..26F5 ; Emoji # 5.2 [6] (โ›ฐ๏ธ..โ›ต) mountain..sailboat +26F7..26FA ; Emoji # 5.2 [4] (โ›ท๏ธ..โ›บ) skier..tent +26FD ; Emoji # 5.2 [1] (โ›ฝ) fuel pump +2702 ; Emoji # 1.1 [1] (โœ‚๏ธ) scissors +2705 ; Emoji # 6.0 [1] (โœ…) white heavy check mark +2708..2709 ; Emoji # 1.1 [2] (โœˆ๏ธ..โœ‰๏ธ) airplane..envelope +270A..270B ; Emoji # 6.0 [2] (โœŠ..โœ‹) raised fist..raised hand +270C..270D ; Emoji # 1.1 [2] (โœŒ๏ธ..โœ๏ธ) victory hand..writing hand +270F ; Emoji # 1.1 [1] (โœ๏ธ) pencil +2712 ; Emoji # 1.1 [1] (โœ’๏ธ) black nib +2714 ; Emoji # 1.1 [1] (โœ”๏ธ) heavy check mark +2716 ; Emoji # 1.1 [1] (โœ–๏ธ) heavy multiplication x +271D ; Emoji # 1.1 [1] (โœ๏ธ) latin cross +2721 ; Emoji # 1.1 [1] (โœก๏ธ) star of David +2728 ; Emoji # 6.0 [1] (โœจ) sparkles +2733..2734 ; Emoji # 1.1 [2] (โœณ๏ธ..โœด๏ธ) eight-spoked asterisk..eight-pointed star +2744 ; Emoji # 1.1 [1] (โ„๏ธ) snowflake +2747 ; Emoji # 1.1 [1] (โ‡๏ธ) sparkle +274C ; Emoji # 6.0 [1] (โŒ) cross mark +274E ; Emoji # 6.0 [1] (โŽ) cross mark button +2753..2755 ; Emoji # 6.0 [3] (โ“..โ•) question mark..white exclamation mark +2757 ; Emoji # 5.2 [1] (โ—) exclamation mark +2763..2764 ; Emoji # 1.1 [2] (โฃ๏ธ..โค๏ธ) heavy heart exclamation..red heart +2795..2797 ; Emoji # 6.0 [3] (โž•..โž—) heavy plus sign..heavy division sign +27A1 ; Emoji # 1.1 [1] (โžก๏ธ) right arrow +27B0 ; Emoji # 6.0 [1] (โžฐ) curly loop +27BF ; Emoji # 6.0 [1] (โžฟ) double curly loop +2934..2935 ; Emoji # 3.2 [2] (โคด๏ธ..โคต๏ธ) right arrow curving up..right arrow curving down +2B05..2B07 ; Emoji # 4.0 [3] (โฌ…๏ธ..โฌ‡๏ธ) left arrow..down arrow +2B1B..2B1C ; Emoji # 5.1 [2] (โฌ›..โฌœ) black large square..white large square +2B50 ; Emoji # 5.1 [1] (โญ) star +2B55 ; Emoji # 5.2 [1] (โญ•) heavy large circle +3030 ; Emoji # 1.1 [1] (ใ€ฐ๏ธ) wavy dash +303D ; Emoji # 3.2 [1] (ใ€ฝ๏ธ) part alternation mark +3297 ; Emoji # 1.1 [1] (ใŠ—๏ธ) Japanese โ€œcongratulationsโ€ button +3299 ; Emoji # 1.1 [1] (ใŠ™๏ธ) Japanese โ€œsecretโ€ button +1F004 ; Emoji # 5.1 [1] (๐Ÿ€„) mahjong red dragon +1F0CF ; Emoji # 6.0 [1] (๐Ÿƒ) joker +1F170..1F171 ; Emoji # 6.0 [2] (๐Ÿ…ฐ๏ธ..๐Ÿ…ฑ๏ธ) A button (blood type)..B button (blood type) +1F17E ; Emoji # 6.0 [1] (๐Ÿ…พ๏ธ) O button (blood type) +1F17F ; Emoji # 5.2 [1] (๐Ÿ…ฟ๏ธ) P button +1F18E ; Emoji # 6.0 [1] (๐Ÿ†Ž) AB button (blood type) +1F191..1F19A ; Emoji # 6.0 [10] (๐Ÿ†‘..๐Ÿ†š) CL button..VS button +1F1E6..1F1FF ; Emoji # 6.0 [26] (๐Ÿ‡ฆ..๐Ÿ‡ฟ) regional indicator symbol letter a..regional indicator symbol letter z +1F201..1F202 ; Emoji # 6.0 [2] (๐Ÿˆ..๐Ÿˆ‚๏ธ) Japanese โ€œhereโ€ button..Japanese โ€œservice chargeโ€ button +1F21A ; Emoji # 5.2 [1] (๐Ÿˆš) Japanese โ€œfree of chargeโ€ button +1F22F ; Emoji # 5.2 [1] (๐Ÿˆฏ) Japanese โ€œreservedโ€ button +1F232..1F23A ; Emoji # 6.0 [9] (๐Ÿˆฒ..๐Ÿˆบ) Japanese โ€œprohibitedโ€ button..Japanese โ€œopen for businessโ€ button +1F250..1F251 ; Emoji # 6.0 [2] (๐Ÿ‰..๐Ÿ‰‘) Japanese โ€œbargainโ€ button..Japanese โ€œacceptableโ€ button +1F300..1F320 ; Emoji # 6.0 [33] (๐ŸŒ€..๐ŸŒ ) cyclone..shooting star +1F321 ; Emoji # 7.0 [1] (๐ŸŒก๏ธ) thermometer +1F324..1F32C ; Emoji # 7.0 [9] (๐ŸŒค๏ธ..๐ŸŒฌ๏ธ) sun behind small cloud..wind face +1F32D..1F32F ; Emoji # 8.0 [3] (๐ŸŒญ..๐ŸŒฏ) hot dog..burrito +1F330..1F335 ; Emoji # 6.0 [6] (๐ŸŒฐ..๐ŸŒต) chestnut..cactus +1F336 ; Emoji # 7.0 [1] (๐ŸŒถ๏ธ) hot pepper +1F337..1F37C ; Emoji # 6.0 [70] (๐ŸŒท..๐Ÿผ) tulip..baby bottle +1F37D ; Emoji # 7.0 [1] (๐Ÿฝ๏ธ) fork and knife with plate +1F37E..1F37F ; Emoji # 8.0 [2] (๐Ÿพ..๐Ÿฟ) bottle with popping cork..popcorn +1F380..1F393 ; Emoji # 6.0 [20] (๐ŸŽ€..๐ŸŽ“) ribbon..graduation cap +1F396..1F397 ; Emoji # 7.0 [2] (๐ŸŽ–๏ธ..๐ŸŽ—๏ธ) military medal..reminder ribbon +1F399..1F39B ; Emoji # 7.0 [3] (๐ŸŽ™๏ธ..๐ŸŽ›๏ธ) studio microphone..control knobs +1F39E..1F39F ; Emoji # 7.0 [2] (๐ŸŽž๏ธ..๐ŸŽŸ๏ธ) film frames..admission tickets +1F3A0..1F3C4 ; Emoji # 6.0 [37] (๐ŸŽ ..๐Ÿ„) carousel horse..person surfing +1F3C5 ; Emoji # 7.0 [1] (๐Ÿ…) sports medal +1F3C6..1F3CA ; Emoji # 6.0 [5] (๐Ÿ†..๐ŸŠ) trophy..person swimming +1F3CB..1F3CE ; Emoji # 7.0 [4] (๐Ÿ‹๏ธ..๐ŸŽ๏ธ) person lifting weights..racing car +1F3CF..1F3D3 ; Emoji # 8.0 [5] (๐Ÿ..๐Ÿ“) cricket game..ping pong +1F3D4..1F3DF ; Emoji # 7.0 [12] (๐Ÿ”๏ธ..๐ŸŸ๏ธ) snow-capped mountain..stadium +1F3E0..1F3F0 ; Emoji # 6.0 [17] (๐Ÿ ..๐Ÿฐ) house..castle +1F3F3..1F3F5 ; Emoji # 7.0 [3] (๐Ÿณ๏ธ..๐Ÿต๏ธ) white flag..rosette +1F3F7 ; Emoji # 7.0 [1] (๐Ÿท๏ธ) label +1F3F8..1F3FF ; Emoji # 8.0 [8] (๐Ÿธ..๐Ÿฟ) badminton..dark skin tone +1F400..1F43E ; Emoji # 6.0 [63] (๐Ÿ€..๐Ÿพ) rat..paw prints +1F43F ; Emoji # 7.0 [1] (๐Ÿฟ๏ธ) chipmunk +1F440 ; Emoji # 6.0 [1] (๐Ÿ‘€) eyes +1F441 ; Emoji # 7.0 [1] (๐Ÿ‘๏ธ) eye +1F442..1F4F7 ; Emoji # 6.0[182] (๐Ÿ‘‚..๐Ÿ“ท) ear..camera +1F4F8 ; Emoji # 7.0 [1] (๐Ÿ“ธ) camera with flash +1F4F9..1F4FC ; Emoji # 6.0 [4] (๐Ÿ“น..๐Ÿ“ผ) video camera..videocassette +1F4FD ; Emoji # 7.0 [1] (๐Ÿ“ฝ๏ธ) film projector +1F4FF ; Emoji # 8.0 [1] (๐Ÿ“ฟ) prayer beads +1F500..1F53D ; Emoji # 6.0 [62] (๐Ÿ”€..๐Ÿ”ฝ) shuffle tracks button..downwards button +1F549..1F54A ; Emoji # 7.0 [2] (๐Ÿ•‰๏ธ..๐Ÿ•Š๏ธ) om..dove +1F54B..1F54E ; Emoji # 8.0 [4] (๐Ÿ•‹..๐Ÿ•Ž) kaaba..menorah +1F550..1F567 ; Emoji # 6.0 [24] (๐Ÿ•..๐Ÿ•ง) one oโ€™clock..twelve-thirty +1F56F..1F570 ; Emoji # 7.0 [2] (๐Ÿ•ฏ๏ธ..๐Ÿ•ฐ๏ธ) candle..mantelpiece clock +1F573..1F579 ; Emoji # 7.0 [7] (๐Ÿ•ณ๏ธ..๐Ÿ•น๏ธ) hole..joystick +1F57A ; Emoji # 9.0 [1] (๐Ÿ•บ) man dancing +1F587 ; Emoji # 7.0 [1] (๐Ÿ–‡๏ธ) linked paperclips +1F58A..1F58D ; Emoji # 7.0 [4] (๐Ÿ–Š๏ธ..๐Ÿ–๏ธ) pen..crayon +1F590 ; Emoji # 7.0 [1] (๐Ÿ–๏ธ) hand with fingers splayed +1F595..1F596 ; Emoji # 7.0 [2] (๐Ÿ–•..๐Ÿ––) middle finger..vulcan salute +1F5A4 ; Emoji # 9.0 [1] (๐Ÿ–ค) black heart +1F5A5 ; Emoji # 7.0 [1] (๐Ÿ–ฅ๏ธ) desktop computer +1F5A8 ; Emoji # 7.0 [1] (๐Ÿ–จ๏ธ) printer +1F5B1..1F5B2 ; Emoji # 7.0 [2] (๐Ÿ–ฑ๏ธ..๐Ÿ–ฒ๏ธ) computer mouse..trackball +1F5BC ; Emoji # 7.0 [1] (๐Ÿ–ผ๏ธ) framed picture +1F5C2..1F5C4 ; Emoji # 7.0 [3] (๐Ÿ—‚๏ธ..๐Ÿ—„๏ธ) card index dividers..file cabinet +1F5D1..1F5D3 ; Emoji # 7.0 [3] (๐Ÿ—‘๏ธ..๐Ÿ—“๏ธ) wastebasket..spiral calendar +1F5DC..1F5DE ; Emoji # 7.0 [3] (๐Ÿ—œ๏ธ..๐Ÿ—ž๏ธ) clamp..rolled-up newspaper +1F5E1 ; Emoji # 7.0 [1] (๐Ÿ—ก๏ธ) dagger +1F5E3 ; Emoji # 7.0 [1] (๐Ÿ—ฃ๏ธ) speaking head +1F5E8 ; Emoji # 7.0 [1] (๐Ÿ—จ๏ธ) left speech bubble +1F5EF ; Emoji # 7.0 [1] (๐Ÿ—ฏ๏ธ) right anger bubble +1F5F3 ; Emoji # 7.0 [1] (๐Ÿ—ณ๏ธ) ballot box with ballot +1F5FA ; Emoji # 7.0 [1] (๐Ÿ—บ๏ธ) world map +1F5FB..1F5FF ; Emoji # 6.0 [5] (๐Ÿ—ป..๐Ÿ—ฟ) mount fuji..moai +1F600 ; Emoji # 6.1 [1] (๐Ÿ˜€) grinning face +1F601..1F610 ; Emoji # 6.0 [16] (๐Ÿ˜..๐Ÿ˜) beaming face with smiling eyes..neutral face +1F611 ; Emoji # 6.1 [1] (๐Ÿ˜‘) expressionless face +1F612..1F614 ; Emoji # 6.0 [3] (๐Ÿ˜’..๐Ÿ˜”) unamused face..pensive face +1F615 ; Emoji # 6.1 [1] (๐Ÿ˜•) confused face +1F616 ; Emoji # 6.0 [1] (๐Ÿ˜–) confounded face +1F617 ; Emoji # 6.1 [1] (๐Ÿ˜—) kissing face +1F618 ; Emoji # 6.0 [1] (๐Ÿ˜˜) face blowing a kiss +1F619 ; Emoji # 6.1 [1] (๐Ÿ˜™) kissing face with smiling eyes +1F61A ; Emoji # 6.0 [1] (๐Ÿ˜š) kissing face with closed eyes +1F61B ; Emoji # 6.1 [1] (๐Ÿ˜›) face with tongue +1F61C..1F61E ; Emoji # 6.0 [3] (๐Ÿ˜œ..๐Ÿ˜ž) winking face with tongue..disappointed face +1F61F ; Emoji # 6.1 [1] (๐Ÿ˜Ÿ) worried face +1F620..1F625 ; Emoji # 6.0 [6] (๐Ÿ˜ ..๐Ÿ˜ฅ) angry face..sad but relieved face +1F626..1F627 ; Emoji # 6.1 [2] (๐Ÿ˜ฆ..๐Ÿ˜ง) frowning face with open mouth..anguished face +1F628..1F62B ; Emoji # 6.0 [4] (๐Ÿ˜จ..๐Ÿ˜ซ) fearful face..tired face +1F62C ; Emoji # 6.1 [1] (๐Ÿ˜ฌ) grimacing face +1F62D ; Emoji # 6.0 [1] (๐Ÿ˜ญ) loudly crying face +1F62E..1F62F ; Emoji # 6.1 [2] (๐Ÿ˜ฎ..๐Ÿ˜ฏ) face with open mouth..hushed face +1F630..1F633 ; Emoji # 6.0 [4] (๐Ÿ˜ฐ..๐Ÿ˜ณ) anxious face with sweat..flushed face +1F634 ; Emoji # 6.1 [1] (๐Ÿ˜ด) sleeping face +1F635..1F640 ; Emoji # 6.0 [12] (๐Ÿ˜ต..๐Ÿ™€) dizzy face..weary cat face +1F641..1F642 ; Emoji # 7.0 [2] (๐Ÿ™..๐Ÿ™‚) slightly frowning face..slightly smiling face +1F643..1F644 ; Emoji # 8.0 [2] (๐Ÿ™ƒ..๐Ÿ™„) upside-down face..face with rolling eyes +1F645..1F64F ; Emoji # 6.0 [11] (๐Ÿ™…..๐Ÿ™) person gesturing NO..folded hands +1F680..1F6C5 ; Emoji # 6.0 [70] (๐Ÿš€..๐Ÿ›…) rocket..left luggage +1F6CB..1F6CF ; Emoji # 7.0 [5] (๐Ÿ›‹๏ธ..๐Ÿ›๏ธ) couch and lamp..bed +1F6D0 ; Emoji # 8.0 [1] (๐Ÿ›) place of worship +1F6D1..1F6D2 ; Emoji # 9.0 [2] (๐Ÿ›‘..๐Ÿ›’) stop sign..shopping cart +1F6E0..1F6E5 ; Emoji # 7.0 [6] (๐Ÿ› ๏ธ..๐Ÿ›ฅ๏ธ) hammer and wrench..motor boat +1F6E9 ; Emoji # 7.0 [1] (๐Ÿ›ฉ๏ธ) small airplane +1F6EB..1F6EC ; Emoji # 7.0 [2] (๐Ÿ›ซ..๐Ÿ›ฌ) airplane departure..airplane arrival +1F6F0 ; Emoji # 7.0 [1] (๐Ÿ›ฐ๏ธ) satellite +1F6F3 ; Emoji # 7.0 [1] (๐Ÿ›ณ๏ธ) passenger ship +1F6F4..1F6F6 ; Emoji # 9.0 [3] (๐Ÿ›ด..๐Ÿ›ถ) kick scooter..canoe +1F6F7..1F6F8 ; Emoji # 10.0 [2] (๐Ÿ›ท..๐Ÿ›ธ) sled..flying saucer +1F6F9 ; Emoji # 11.0 [1] (๐Ÿ›น) skateboard +1F910..1F918 ; Emoji # 8.0 [9] (๐Ÿค..๐Ÿค˜) zipper-mouth face..sign of the horns +1F919..1F91E ; Emoji # 9.0 [6] (๐Ÿค™..๐Ÿคž) call me hand..crossed fingers +1F91F ; Emoji # 10.0 [1] (๐ŸคŸ) love-you gesture +1F920..1F927 ; Emoji # 9.0 [8] (๐Ÿค ..๐Ÿคง) cowboy hat face..sneezing face +1F928..1F92F ; Emoji # 10.0 [8] (๐Ÿคจ..๐Ÿคฏ) face with raised eyebrow..exploding head +1F930 ; Emoji # 9.0 [1] (๐Ÿคฐ) pregnant woman +1F931..1F932 ; Emoji # 10.0 [2] (๐Ÿคฑ..๐Ÿคฒ) breast-feeding..palms up together +1F933..1F93A ; Emoji # 9.0 [8] (๐Ÿคณ..๐Ÿคบ) selfie..person fencing +1F93C..1F93E ; Emoji # 9.0 [3] (๐Ÿคผ..๐Ÿคพ) people wrestling..person playing handball +1F940..1F945 ; Emoji # 9.0 [6] (๐Ÿฅ€..๐Ÿฅ…) wilted flower..goal net +1F947..1F94B ; Emoji # 9.0 [5] (๐Ÿฅ‡..๐Ÿฅ‹) 1st place medal..martial arts uniform +1F94C ; Emoji # 10.0 [1] (๐ŸฅŒ) curling stone +1F94D..1F94F ; Emoji # 11.0 [3] (๐Ÿฅ..๐Ÿฅ) lacrosse..flying disc +1F950..1F95E ; Emoji # 9.0 [15] (๐Ÿฅ..๐Ÿฅž) croissant..pancakes +1F95F..1F96B ; Emoji # 10.0 [13] (๐ŸฅŸ..๐Ÿฅซ) dumpling..canned food +1F96C..1F970 ; Emoji # 11.0 [5] (๐Ÿฅฌ..๐Ÿฅฐ) leafy green..smiling face with 3 hearts +1F973..1F976 ; Emoji # 11.0 [4] (๐Ÿฅณ..๐Ÿฅถ) partying face..cold face +1F97A ; Emoji # 11.0 [1] (๐Ÿฅบ) pleading face +1F97C..1F97F ; Emoji # 11.0 [4] (๐Ÿฅผ..๐Ÿฅฟ) lab coat..womanโ€™s flat shoe +1F980..1F984 ; Emoji # 8.0 [5] (๐Ÿฆ€..๐Ÿฆ„) crab..unicorn face +1F985..1F991 ; Emoji # 9.0 [13] (๐Ÿฆ…..๐Ÿฆ‘) eagle..squid +1F992..1F997 ; Emoji # 10.0 [6] (๐Ÿฆ’..๐Ÿฆ—) giraffe..cricket +1F998..1F9A2 ; Emoji # 11.0 [11] (๐Ÿฆ˜..๐Ÿฆข) kangaroo..swan +1F9B0..1F9B9 ; Emoji # 11.0 [10] (๐Ÿฆฐ..๐Ÿฆน) red-haired..supervillain +1F9C0 ; Emoji # 8.0 [1] (๐Ÿง€) cheese wedge +1F9C1..1F9C2 ; Emoji # 11.0 [2] (๐Ÿง..๐Ÿง‚) cupcake..salt +1F9D0..1F9E6 ; Emoji # 10.0 [23] (๐Ÿง..๐Ÿงฆ) face with monocle..socks +1F9E7..1F9FF ; Emoji # 11.0 [25] (๐Ÿงง..๐Ÿงฟ) red envelope..nazar amulet + +# Total elements: 1250 + +# ================================================ + +# All omitted code points have Emoji_Presentation=No +# @missing: 0000..10FFFF ; Emoji_Presentation ; No + +231A..231B ; Emoji_Presentation # 1.1 [2] (โŒš..โŒ›) watch..hourglass done +23E9..23EC ; Emoji_Presentation # 6.0 [4] (โฉ..โฌ) fast-forward button..fast down button +23F0 ; Emoji_Presentation # 6.0 [1] (โฐ) alarm clock +23F3 ; Emoji_Presentation # 6.0 [1] (โณ) hourglass not done +25FD..25FE ; Emoji_Presentation # 3.2 [2] (โ—ฝ..โ—พ) white medium-small square..black medium-small square +2614..2615 ; Emoji_Presentation # 4.0 [2] (โ˜”..โ˜•) umbrella with rain drops..hot beverage +2648..2653 ; Emoji_Presentation # 1.1 [12] (โ™ˆ..โ™“) Aries..Pisces +267F ; Emoji_Presentation # 4.1 [1] (โ™ฟ) wheelchair symbol +2693 ; Emoji_Presentation # 4.1 [1] (โš“) anchor +26A1 ; Emoji_Presentation # 4.0 [1] (โšก) high voltage +26AA..26AB ; Emoji_Presentation # 4.1 [2] (โšช..โšซ) white circle..black circle +26BD..26BE ; Emoji_Presentation # 5.2 [2] (โšฝ..โšพ) soccer ball..baseball +26C4..26C5 ; Emoji_Presentation # 5.2 [2] (โ›„..โ›…) snowman without snow..sun behind cloud +26CE ; Emoji_Presentation # 6.0 [1] (โ›Ž) Ophiuchus +26D4 ; Emoji_Presentation # 5.2 [1] (โ›”) no entry +26EA ; Emoji_Presentation # 5.2 [1] (โ›ช) church +26F2..26F3 ; Emoji_Presentation # 5.2 [2] (โ›ฒ..โ›ณ) fountain..flag in hole +26F5 ; Emoji_Presentation # 5.2 [1] (โ›ต) sailboat +26FA ; Emoji_Presentation # 5.2 [1] (โ›บ) tent +26FD ; Emoji_Presentation # 5.2 [1] (โ›ฝ) fuel pump +2705 ; Emoji_Presentation # 6.0 [1] (โœ…) white heavy check mark +270A..270B ; Emoji_Presentation # 6.0 [2] (โœŠ..โœ‹) raised fist..raised hand +2728 ; Emoji_Presentation # 6.0 [1] (โœจ) sparkles +274C ; Emoji_Presentation # 6.0 [1] (โŒ) cross mark +274E ; Emoji_Presentation # 6.0 [1] (โŽ) cross mark button +2753..2755 ; Emoji_Presentation # 6.0 [3] (โ“..โ•) question mark..white exclamation mark +2757 ; Emoji_Presentation # 5.2 [1] (โ—) exclamation mark +2795..2797 ; Emoji_Presentation # 6.0 [3] (โž•..โž—) heavy plus sign..heavy division sign +27B0 ; Emoji_Presentation # 6.0 [1] (โžฐ) curly loop +27BF ; Emoji_Presentation # 6.0 [1] (โžฟ) double curly loop +2B1B..2B1C ; Emoji_Presentation # 5.1 [2] (โฌ›..โฌœ) black large square..white large square +2B50 ; Emoji_Presentation # 5.1 [1] (โญ) star +2B55 ; Emoji_Presentation # 5.2 [1] (โญ•) heavy large circle +1F004 ; Emoji_Presentation # 5.1 [1] (๐Ÿ€„) mahjong red dragon +1F0CF ; Emoji_Presentation # 6.0 [1] (๐Ÿƒ) joker +1F18E ; Emoji_Presentation # 6.0 [1] (๐Ÿ†Ž) AB button (blood type) +1F191..1F19A ; Emoji_Presentation # 6.0 [10] (๐Ÿ†‘..๐Ÿ†š) CL button..VS button +1F1E6..1F1FF ; Emoji_Presentation # 6.0 [26] (๐Ÿ‡ฆ..๐Ÿ‡ฟ) regional indicator symbol letter a..regional indicator symbol letter z +1F201 ; Emoji_Presentation # 6.0 [1] (๐Ÿˆ) Japanese โ€œhereโ€ button +1F21A ; Emoji_Presentation # 5.2 [1] (๐Ÿˆš) Japanese โ€œfree of chargeโ€ button +1F22F ; Emoji_Presentation # 5.2 [1] (๐Ÿˆฏ) Japanese โ€œreservedโ€ button +1F232..1F236 ; Emoji_Presentation # 6.0 [5] (๐Ÿˆฒ..๐Ÿˆถ) Japanese โ€œprohibitedโ€ button..Japanese โ€œnot free of chargeโ€ button +1F238..1F23A ; Emoji_Presentation # 6.0 [3] (๐Ÿˆธ..๐Ÿˆบ) Japanese โ€œapplicationโ€ button..Japanese โ€œopen for businessโ€ button +1F250..1F251 ; Emoji_Presentation # 6.0 [2] (๐Ÿ‰..๐Ÿ‰‘) Japanese โ€œbargainโ€ button..Japanese โ€œacceptableโ€ button +1F300..1F320 ; Emoji_Presentation # 6.0 [33] (๐ŸŒ€..๐ŸŒ ) cyclone..shooting star +1F32D..1F32F ; Emoji_Presentation # 8.0 [3] (๐ŸŒญ..๐ŸŒฏ) hot dog..burrito +1F330..1F335 ; Emoji_Presentation # 6.0 [6] (๐ŸŒฐ..๐ŸŒต) chestnut..cactus +1F337..1F37C ; Emoji_Presentation # 6.0 [70] (๐ŸŒท..๐Ÿผ) tulip..baby bottle +1F37E..1F37F ; Emoji_Presentation # 8.0 [2] (๐Ÿพ..๐Ÿฟ) bottle with popping cork..popcorn +1F380..1F393 ; Emoji_Presentation # 6.0 [20] (๐ŸŽ€..๐ŸŽ“) ribbon..graduation cap +1F3A0..1F3C4 ; Emoji_Presentation # 6.0 [37] (๐ŸŽ ..๐Ÿ„) carousel horse..person surfing +1F3C5 ; Emoji_Presentation # 7.0 [1] (๐Ÿ…) sports medal +1F3C6..1F3CA ; Emoji_Presentation # 6.0 [5] (๐Ÿ†..๐ŸŠ) trophy..person swimming +1F3CF..1F3D3 ; Emoji_Presentation # 8.0 [5] (๐Ÿ..๐Ÿ“) cricket game..ping pong +1F3E0..1F3F0 ; Emoji_Presentation # 6.0 [17] (๐Ÿ ..๐Ÿฐ) house..castle +1F3F4 ; Emoji_Presentation # 7.0 [1] (๐Ÿด) black flag +1F3F8..1F3FF ; Emoji_Presentation # 8.0 [8] (๐Ÿธ..๐Ÿฟ) badminton..dark skin tone +1F400..1F43E ; Emoji_Presentation # 6.0 [63] (๐Ÿ€..๐Ÿพ) rat..paw prints +1F440 ; Emoji_Presentation # 6.0 [1] (๐Ÿ‘€) eyes +1F442..1F4F7 ; Emoji_Presentation # 6.0[182] (๐Ÿ‘‚..๐Ÿ“ท) ear..camera +1F4F8 ; Emoji_Presentation # 7.0 [1] (๐Ÿ“ธ) camera with flash +1F4F9..1F4FC ; Emoji_Presentation # 6.0 [4] (๐Ÿ“น..๐Ÿ“ผ) video camera..videocassette +1F4FF ; Emoji_Presentation # 8.0 [1] (๐Ÿ“ฟ) prayer beads +1F500..1F53D ; Emoji_Presentation # 6.0 [62] (๐Ÿ”€..๐Ÿ”ฝ) shuffle tracks button..downwards button +1F54B..1F54E ; Emoji_Presentation # 8.0 [4] (๐Ÿ•‹..๐Ÿ•Ž) kaaba..menorah +1F550..1F567 ; Emoji_Presentation # 6.0 [24] (๐Ÿ•..๐Ÿ•ง) one oโ€™clock..twelve-thirty +1F57A ; Emoji_Presentation # 9.0 [1] (๐Ÿ•บ) man dancing +1F595..1F596 ; Emoji_Presentation # 7.0 [2] (๐Ÿ–•..๐Ÿ––) middle finger..vulcan salute +1F5A4 ; Emoji_Presentation # 9.0 [1] (๐Ÿ–ค) black heart +1F5FB..1F5FF ; Emoji_Presentation # 6.0 [5] (๐Ÿ—ป..๐Ÿ—ฟ) mount fuji..moai +1F600 ; Emoji_Presentation # 6.1 [1] (๐Ÿ˜€) grinning face +1F601..1F610 ; Emoji_Presentation # 6.0 [16] (๐Ÿ˜..๐Ÿ˜) beaming face with smiling eyes..neutral face +1F611 ; Emoji_Presentation # 6.1 [1] (๐Ÿ˜‘) expressionless face +1F612..1F614 ; Emoji_Presentation # 6.0 [3] (๐Ÿ˜’..๐Ÿ˜”) unamused face..pensive face +1F615 ; Emoji_Presentation # 6.1 [1] (๐Ÿ˜•) confused face +1F616 ; Emoji_Presentation # 6.0 [1] (๐Ÿ˜–) confounded face +1F617 ; Emoji_Presentation # 6.1 [1] (๐Ÿ˜—) kissing face +1F618 ; Emoji_Presentation # 6.0 [1] (๐Ÿ˜˜) face blowing a kiss +1F619 ; Emoji_Presentation # 6.1 [1] (๐Ÿ˜™) kissing face with smiling eyes +1F61A ; Emoji_Presentation # 6.0 [1] (๐Ÿ˜š) kissing face with closed eyes +1F61B ; Emoji_Presentation # 6.1 [1] (๐Ÿ˜›) face with tongue +1F61C..1F61E ; Emoji_Presentation # 6.0 [3] (๐Ÿ˜œ..๐Ÿ˜ž) winking face with tongue..disappointed face +1F61F ; Emoji_Presentation # 6.1 [1] (๐Ÿ˜Ÿ) worried face +1F620..1F625 ; Emoji_Presentation # 6.0 [6] (๐Ÿ˜ ..๐Ÿ˜ฅ) angry face..sad but relieved face +1F626..1F627 ; Emoji_Presentation # 6.1 [2] (๐Ÿ˜ฆ..๐Ÿ˜ง) frowning face with open mouth..anguished face +1F628..1F62B ; Emoji_Presentation # 6.0 [4] (๐Ÿ˜จ..๐Ÿ˜ซ) fearful face..tired face +1F62C ; Emoji_Presentation # 6.1 [1] (๐Ÿ˜ฌ) grimacing face +1F62D ; Emoji_Presentation # 6.0 [1] (๐Ÿ˜ญ) loudly crying face +1F62E..1F62F ; Emoji_Presentation # 6.1 [2] (๐Ÿ˜ฎ..๐Ÿ˜ฏ) face with open mouth..hushed face +1F630..1F633 ; Emoji_Presentation # 6.0 [4] (๐Ÿ˜ฐ..๐Ÿ˜ณ) anxious face with sweat..flushed face +1F634 ; Emoji_Presentation # 6.1 [1] (๐Ÿ˜ด) sleeping face +1F635..1F640 ; Emoji_Presentation # 6.0 [12] (๐Ÿ˜ต..๐Ÿ™€) dizzy face..weary cat face +1F641..1F642 ; Emoji_Presentation # 7.0 [2] (๐Ÿ™..๐Ÿ™‚) slightly frowning face..slightly smiling face +1F643..1F644 ; Emoji_Presentation # 8.0 [2] (๐Ÿ™ƒ..๐Ÿ™„) upside-down face..face with rolling eyes +1F645..1F64F ; Emoji_Presentation # 6.0 [11] (๐Ÿ™…..๐Ÿ™) person gesturing NO..folded hands +1F680..1F6C5 ; Emoji_Presentation # 6.0 [70] (๐Ÿš€..๐Ÿ›…) rocket..left luggage +1F6CC ; Emoji_Presentation # 7.0 [1] (๐Ÿ›Œ) person in bed +1F6D0 ; Emoji_Presentation # 8.0 [1] (๐Ÿ›) place of worship +1F6D1..1F6D2 ; Emoji_Presentation # 9.0 [2] (๐Ÿ›‘..๐Ÿ›’) stop sign..shopping cart +1F6EB..1F6EC ; Emoji_Presentation # 7.0 [2] (๐Ÿ›ซ..๐Ÿ›ฌ) airplane departure..airplane arrival +1F6F4..1F6F6 ; Emoji_Presentation # 9.0 [3] (๐Ÿ›ด..๐Ÿ›ถ) kick scooter..canoe +1F6F7..1F6F8 ; Emoji_Presentation # 10.0 [2] (๐Ÿ›ท..๐Ÿ›ธ) sled..flying saucer +1F6F9 ; Emoji_Presentation # 11.0 [1] (๐Ÿ›น) skateboard +1F910..1F918 ; Emoji_Presentation # 8.0 [9] (๐Ÿค..๐Ÿค˜) zipper-mouth face..sign of the horns +1F919..1F91E ; Emoji_Presentation # 9.0 [6] (๐Ÿค™..๐Ÿคž) call me hand..crossed fingers +1F91F ; Emoji_Presentation # 10.0 [1] (๐ŸคŸ) love-you gesture +1F920..1F927 ; Emoji_Presentation # 9.0 [8] (๐Ÿค ..๐Ÿคง) cowboy hat face..sneezing face +1F928..1F92F ; Emoji_Presentation # 10.0 [8] (๐Ÿคจ..๐Ÿคฏ) face with raised eyebrow..exploding head +1F930 ; Emoji_Presentation # 9.0 [1] (๐Ÿคฐ) pregnant woman +1F931..1F932 ; Emoji_Presentation # 10.0 [2] (๐Ÿคฑ..๐Ÿคฒ) breast-feeding..palms up together +1F933..1F93A ; Emoji_Presentation # 9.0 [8] (๐Ÿคณ..๐Ÿคบ) selfie..person fencing +1F93C..1F93E ; Emoji_Presentation # 9.0 [3] (๐Ÿคผ..๐Ÿคพ) people wrestling..person playing handball +1F940..1F945 ; Emoji_Presentation # 9.0 [6] (๐Ÿฅ€..๐Ÿฅ…) wilted flower..goal net +1F947..1F94B ; Emoji_Presentation # 9.0 [5] (๐Ÿฅ‡..๐Ÿฅ‹) 1st place medal..martial arts uniform +1F94C ; Emoji_Presentation # 10.0 [1] (๐ŸฅŒ) curling stone +1F94D..1F94F ; Emoji_Presentation # 11.0 [3] (๐Ÿฅ..๐Ÿฅ) lacrosse..flying disc +1F950..1F95E ; Emoji_Presentation # 9.0 [15] (๐Ÿฅ..๐Ÿฅž) croissant..pancakes +1F95F..1F96B ; Emoji_Presentation # 10.0 [13] (๐ŸฅŸ..๐Ÿฅซ) dumpling..canned food +1F96C..1F970 ; Emoji_Presentation # 11.0 [5] (๐Ÿฅฌ..๐Ÿฅฐ) leafy green..smiling face with 3 hearts +1F973..1F976 ; Emoji_Presentation # 11.0 [4] (๐Ÿฅณ..๐Ÿฅถ) partying face..cold face +1F97A ; Emoji_Presentation # 11.0 [1] (๐Ÿฅบ) pleading face +1F97C..1F97F ; Emoji_Presentation # 11.0 [4] (๐Ÿฅผ..๐Ÿฅฟ) lab coat..womanโ€™s flat shoe +1F980..1F984 ; Emoji_Presentation # 8.0 [5] (๐Ÿฆ€..๐Ÿฆ„) crab..unicorn face +1F985..1F991 ; Emoji_Presentation # 9.0 [13] (๐Ÿฆ…..๐Ÿฆ‘) eagle..squid +1F992..1F997 ; Emoji_Presentation # 10.0 [6] (๐Ÿฆ’..๐Ÿฆ—) giraffe..cricket +1F998..1F9A2 ; Emoji_Presentation # 11.0 [11] (๐Ÿฆ˜..๐Ÿฆข) kangaroo..swan +1F9B0..1F9B9 ; Emoji_Presentation # 11.0 [10] (๐Ÿฆฐ..๐Ÿฆน) red-haired..supervillain +1F9C0 ; Emoji_Presentation # 8.0 [1] (๐Ÿง€) cheese wedge +1F9C1..1F9C2 ; Emoji_Presentation # 11.0 [2] (๐Ÿง..๐Ÿง‚) cupcake..salt +1F9D0..1F9E6 ; Emoji_Presentation # 10.0 [23] (๐Ÿง..๐Ÿงฆ) face with monocle..socks +1F9E7..1F9FF ; Emoji_Presentation # 11.0 [25] (๐Ÿงง..๐Ÿงฟ) red envelope..nazar amulet + +# Total elements: 1032 + +# ================================================ + +# All omitted code points have Emoji_Modifier=No +# @missing: 0000..10FFFF ; Emoji_Modifier ; No + +1F3FB..1F3FF ; Emoji_Modifier # 8.0 [5] (๐Ÿป..๐Ÿฟ) light skin tone..dark skin tone + +# Total elements: 5 + +# ================================================ + +# All omitted code points have Emoji_Modifier_Base=No +# @missing: 0000..10FFFF ; Emoji_Modifier_Base ; No + +261D ; Emoji_Modifier_Base # 1.1 [1] (โ˜๏ธ) index pointing up +26F9 ; Emoji_Modifier_Base # 5.2 [1] (โ›น๏ธ) person bouncing ball +270A..270B ; Emoji_Modifier_Base # 6.0 [2] (โœŠ..โœ‹) raised fist..raised hand +270C..270D ; Emoji_Modifier_Base # 1.1 [2] (โœŒ๏ธ..โœ๏ธ) victory hand..writing hand +1F385 ; Emoji_Modifier_Base # 6.0 [1] (๐ŸŽ…) Santa Claus +1F3C2..1F3C4 ; Emoji_Modifier_Base # 6.0 [3] (๐Ÿ‚..๐Ÿ„) snowboarder..person surfing +1F3C7 ; Emoji_Modifier_Base # 6.0 [1] (๐Ÿ‡) horse racing +1F3CA ; Emoji_Modifier_Base # 6.0 [1] (๐ŸŠ) person swimming +1F3CB..1F3CC ; Emoji_Modifier_Base # 7.0 [2] (๐Ÿ‹๏ธ..๐ŸŒ๏ธ) person lifting weights..person golfing +1F442..1F443 ; Emoji_Modifier_Base # 6.0 [2] (๐Ÿ‘‚..๐Ÿ‘ƒ) ear..nose +1F446..1F450 ; Emoji_Modifier_Base # 6.0 [11] (๐Ÿ‘†..๐Ÿ‘) backhand index pointing up..open hands +1F466..1F469 ; Emoji_Modifier_Base # 6.0 [4] (๐Ÿ‘ฆ..๐Ÿ‘ฉ) boy..woman +1F46E ; Emoji_Modifier_Base # 6.0 [1] (๐Ÿ‘ฎ) police officer +1F470..1F478 ; Emoji_Modifier_Base # 6.0 [9] (๐Ÿ‘ฐ..๐Ÿ‘ธ) bride with veil..princess +1F47C ; Emoji_Modifier_Base # 6.0 [1] (๐Ÿ‘ผ) baby angel +1F481..1F483 ; Emoji_Modifier_Base # 6.0 [3] (๐Ÿ’..๐Ÿ’ƒ) person tipping hand..woman dancing +1F485..1F487 ; Emoji_Modifier_Base # 6.0 [3] (๐Ÿ’…..๐Ÿ’‡) nail polish..person getting haircut +1F4AA ; Emoji_Modifier_Base # 6.0 [1] (๐Ÿ’ช) flexed biceps +1F574..1F575 ; Emoji_Modifier_Base # 7.0 [2] (๐Ÿ•ด๏ธ..๐Ÿ•ต๏ธ) man in suit levitating..detective +1F57A ; Emoji_Modifier_Base # 9.0 [1] (๐Ÿ•บ) man dancing +1F590 ; Emoji_Modifier_Base # 7.0 [1] (๐Ÿ–๏ธ) hand with fingers splayed +1F595..1F596 ; Emoji_Modifier_Base # 7.0 [2] (๐Ÿ–•..๐Ÿ––) middle finger..vulcan salute +1F645..1F647 ; Emoji_Modifier_Base # 6.0 [3] (๐Ÿ™…..๐Ÿ™‡) person gesturing NO..person bowing +1F64B..1F64F ; Emoji_Modifier_Base # 6.0 [5] (๐Ÿ™‹..๐Ÿ™) person raising hand..folded hands +1F6A3 ; Emoji_Modifier_Base # 6.0 [1] (๐Ÿšฃ) person rowing boat +1F6B4..1F6B6 ; Emoji_Modifier_Base # 6.0 [3] (๐Ÿšด..๐Ÿšถ) person biking..person walking +1F6C0 ; Emoji_Modifier_Base # 6.0 [1] (๐Ÿ›€) person taking bath +1F6CC ; Emoji_Modifier_Base # 7.0 [1] (๐Ÿ›Œ) person in bed +1F918 ; Emoji_Modifier_Base # 8.0 [1] (๐Ÿค˜) sign of the horns +1F919..1F91C ; Emoji_Modifier_Base # 9.0 [4] (๐Ÿค™..๐Ÿคœ) call me hand..right-facing fist +1F91E ; Emoji_Modifier_Base # 9.0 [1] (๐Ÿคž) crossed fingers +1F91F ; Emoji_Modifier_Base # 10.0 [1] (๐ŸคŸ) love-you gesture +1F926 ; Emoji_Modifier_Base # 9.0 [1] (๐Ÿคฆ) person facepalming +1F930 ; Emoji_Modifier_Base # 9.0 [1] (๐Ÿคฐ) pregnant woman +1F931..1F932 ; Emoji_Modifier_Base # 10.0 [2] (๐Ÿคฑ..๐Ÿคฒ) breast-feeding..palms up together +1F933..1F939 ; Emoji_Modifier_Base # 9.0 [7] (๐Ÿคณ..๐Ÿคน) selfie..person juggling +1F93D..1F93E ; Emoji_Modifier_Base # 9.0 [2] (๐Ÿคฝ..๐Ÿคพ) person playing water polo..person playing handball +1F9B5..1F9B6 ; Emoji_Modifier_Base # 11.0 [2] (๐Ÿฆต..๐Ÿฆถ) leg..foot +1F9B8..1F9B9 ; Emoji_Modifier_Base # 11.0 [2] (๐Ÿฆธ..๐Ÿฆน) superhero..supervillain +1F9D1..1F9DD ; Emoji_Modifier_Base # 10.0 [13] (๐Ÿง‘..๐Ÿง) adult..elf + +# Total elements: 106 + +# ================================================ + +# All omitted code points have Emoji_Component=No +# @missing: 0000..10FFFF ; Emoji_Component ; No + +0023 ; Emoji_Component # 1.1 [1] (#๏ธ) number sign +002A ; Emoji_Component # 1.1 [1] (*๏ธ) asterisk +0030..0039 ; Emoji_Component # 1.1 [10] (0๏ธ..9๏ธ) digit zero..digit nine +200D ; Emoji_Component # 1.1 [1] (โ€) zero width joiner +20E3 ; Emoji_Component # 3.0 [1] (โƒฃ) combining enclosing keycap +FE0F ; Emoji_Component # 3.2 [1] () VARIATION SELECTOR-16 +1F1E6..1F1FF ; Emoji_Component # 6.0 [26] (๐Ÿ‡ฆ..๐Ÿ‡ฟ) regional indicator symbol letter a..regional indicator symbol letter z +1F3FB..1F3FF ; Emoji_Component # 8.0 [5] (๐Ÿป..๐Ÿฟ) light skin tone..dark skin tone +1F9B0..1F9B3 ; Emoji_Component # 11.0 [4] (๐Ÿฆฐ..๐Ÿฆณ) red-haired..white-haired +E0020..E007F ; Emoji_Component # 3.1 [96] (๓ € ..๓ ฟ) tag space..cancel tag + +# Total elements: 146 + +# ================================================ + +# All omitted code points have Extended_Pictographic=No +# @missing: 0000..10FFFF ; Extended_Pictographic ; No + +00A9 ; Extended_Pictographic# 1.1 [1] (ยฉ๏ธ) copyright +00AE ; Extended_Pictographic# 1.1 [1] (ยฎ๏ธ) registered +203C ; Extended_Pictographic# 1.1 [1] (โ€ผ๏ธ) double exclamation mark +2049 ; Extended_Pictographic# 3.0 [1] (โ‰๏ธ) exclamation question mark +2122 ; Extended_Pictographic# 1.1 [1] (โ„ข๏ธ) trade mark +2139 ; Extended_Pictographic# 3.0 [1] (โ„น๏ธ) information +2194..2199 ; Extended_Pictographic# 1.1 [6] (โ†”๏ธ..โ†™๏ธ) left-right arrow..down-left arrow +21A9..21AA ; Extended_Pictographic# 1.1 [2] (โ†ฉ๏ธ..โ†ช๏ธ) right arrow curving left..left arrow curving right +231A..231B ; Extended_Pictographic# 1.1 [2] (โŒš..โŒ›) watch..hourglass done +2328 ; Extended_Pictographic# 1.1 [1] (โŒจ๏ธ) keyboard +2388 ; Extended_Pictographic# 3.0 [1] (โŽˆ๏ธ) HELM SYMBOL +23CF ; Extended_Pictographic# 4.0 [1] (โ๏ธ) eject button +23E9..23F3 ; Extended_Pictographic# 6.0 [11] (โฉ..โณ) fast-forward button..hourglass not done +23F8..23FA ; Extended_Pictographic# 7.0 [3] (โธ๏ธ..โบ๏ธ) pause button..record button +24C2 ; Extended_Pictographic# 1.1 [1] (โ“‚๏ธ) circled M +25AA..25AB ; Extended_Pictographic# 1.1 [2] (โ–ช๏ธ..โ–ซ๏ธ) black small square..white small square +25B6 ; Extended_Pictographic# 1.1 [1] (โ–ถ๏ธ) play button +25C0 ; Extended_Pictographic# 1.1 [1] (โ—€๏ธ) reverse button +25FB..25FE ; Extended_Pictographic# 3.2 [4] (โ—ป๏ธ..โ—พ) white medium square..black medium-small square +2600..2605 ; Extended_Pictographic# 1.1 [6] (โ˜€๏ธ..โ˜…๏ธ) sun..BLACK STAR +2607..2612 ; Extended_Pictographic# 1.1 [12] (โ˜‡๏ธ..โ˜’๏ธ) LIGHTNING..BALLOT BOX WITH X +2614..2615 ; Extended_Pictographic# 4.0 [2] (โ˜”..โ˜•) umbrella with rain drops..hot beverage +2616..2617 ; Extended_Pictographic# 3.2 [2] (โ˜–๏ธ..โ˜—๏ธ) WHITE SHOGI PIECE..BLACK SHOGI PIECE +2618 ; Extended_Pictographic# 4.1 [1] (โ˜˜๏ธ) shamrock +2619 ; Extended_Pictographic# 3.0 [1] (โ˜™๏ธ) REVERSED ROTATED FLORAL HEART BULLET +261A..266F ; Extended_Pictographic# 1.1 [86] (โ˜š๏ธ..โ™ฏ๏ธ) BLACK LEFT POINTING INDEX..MUSIC SHARP SIGN +2670..2671 ; Extended_Pictographic# 3.0 [2] (โ™ฐ๏ธ..โ™ฑ๏ธ) WEST SYRIAC CROSS..EAST SYRIAC CROSS +2672..267D ; Extended_Pictographic# 3.2 [12] (โ™ฒ๏ธ..โ™ฝ๏ธ) UNIVERSAL RECYCLING SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL +267E..267F ; Extended_Pictographic# 4.1 [2] (โ™พ๏ธ..โ™ฟ) infinity..wheelchair symbol +2680..2685 ; Extended_Pictographic# 3.2 [6] (โš€๏ธ..โš…๏ธ) DIE FACE-1..DIE FACE-6 +2690..2691 ; Extended_Pictographic# 4.0 [2] (โš๏ธ..โš‘๏ธ) WHITE FLAG..BLACK FLAG +2692..269C ; Extended_Pictographic# 4.1 [11] (โš’๏ธ..โšœ๏ธ) hammer and pick..fleur-de-lis +269D ; Extended_Pictographic# 5.1 [1] (โš๏ธ) OUTLINED WHITE STAR +269E..269F ; Extended_Pictographic# 5.2 [2] (โšž๏ธ..โšŸ๏ธ) THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT +26A0..26A1 ; Extended_Pictographic# 4.0 [2] (โš ๏ธ..โšก) warning..high voltage +26A2..26B1 ; Extended_Pictographic# 4.1 [16] (โšข๏ธ..โšฑ๏ธ) DOUBLED FEMALE SIGN..funeral urn +26B2 ; Extended_Pictographic# 5.0 [1] (โšฒ๏ธ) NEUTER +26B3..26BC ; Extended_Pictographic# 5.1 [10] (โšณ๏ธ..โšผ๏ธ) CERES..SESQUIQUADRATE +26BD..26BF ; Extended_Pictographic# 5.2 [3] (โšฝ..โšฟ๏ธ) soccer ball..SQUARED KEY +26C0..26C3 ; Extended_Pictographic# 5.1 [4] (โ›€๏ธ..โ›ƒ๏ธ) WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING +26C4..26CD ; Extended_Pictographic# 5.2 [10] (โ›„..โ›๏ธ) snowman without snow..DISABLED CAR +26CE ; Extended_Pictographic# 6.0 [1] (โ›Ž) Ophiuchus +26CF..26E1 ; Extended_Pictographic# 5.2 [19] (โ›๏ธ..โ›ก๏ธ) pick..RESTRICTED LEFT ENTRY-2 +26E2 ; Extended_Pictographic# 6.0 [1] (โ›ข๏ธ) ASTRONOMICAL SYMBOL FOR URANUS +26E3 ; Extended_Pictographic# 5.2 [1] (โ›ฃ๏ธ) HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE +26E4..26E7 ; Extended_Pictographic# 6.0 [4] (โ›ค๏ธ..โ›ง๏ธ) PENTAGRAM..INVERTED PENTAGRAM +26E8..26FF ; Extended_Pictographic# 5.2 [24] (โ›จ๏ธ..โ›ฟ๏ธ) BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE +2700 ; Extended_Pictographic# 7.0 [1] (โœ€๏ธ) BLACK SAFETY SCISSORS +2701..2704 ; Extended_Pictographic# 1.1 [4] (โœ๏ธ..โœ„๏ธ) UPPER BLADE SCISSORS..WHITE SCISSORS +2705 ; Extended_Pictographic# 6.0 [1] (โœ…) white heavy check mark +2708..2709 ; Extended_Pictographic# 1.1 [2] (โœˆ๏ธ..โœ‰๏ธ) airplane..envelope +270A..270B ; Extended_Pictographic# 6.0 [2] (โœŠ..โœ‹) raised fist..raised hand +270C..2712 ; Extended_Pictographic# 1.1 [7] (โœŒ๏ธ..โœ’๏ธ) victory hand..black nib +2714 ; Extended_Pictographic# 1.1 [1] (โœ”๏ธ) heavy check mark +2716 ; Extended_Pictographic# 1.1 [1] (โœ–๏ธ) heavy multiplication x +271D ; Extended_Pictographic# 1.1 [1] (โœ๏ธ) latin cross +2721 ; Extended_Pictographic# 1.1 [1] (โœก๏ธ) star of David +2728 ; Extended_Pictographic# 6.0 [1] (โœจ) sparkles +2733..2734 ; Extended_Pictographic# 1.1 [2] (โœณ๏ธ..โœด๏ธ) eight-spoked asterisk..eight-pointed star +2744 ; Extended_Pictographic# 1.1 [1] (โ„๏ธ) snowflake +2747 ; Extended_Pictographic# 1.1 [1] (โ‡๏ธ) sparkle +274C ; Extended_Pictographic# 6.0 [1] (โŒ) cross mark +274E ; Extended_Pictographic# 6.0 [1] (โŽ) cross mark button +2753..2755 ; Extended_Pictographic# 6.0 [3] (โ“..โ•) question mark..white exclamation mark +2757 ; Extended_Pictographic# 5.2 [1] (โ—) exclamation mark +2763..2767 ; Extended_Pictographic# 1.1 [5] (โฃ๏ธ..โง๏ธ) heavy heart exclamation..ROTATED FLORAL HEART BULLET +2795..2797 ; Extended_Pictographic# 6.0 [3] (โž•..โž—) heavy plus sign..heavy division sign +27A1 ; Extended_Pictographic# 1.1 [1] (โžก๏ธ) right arrow +27B0 ; Extended_Pictographic# 6.0 [1] (โžฐ) curly loop +27BF ; Extended_Pictographic# 6.0 [1] (โžฟ) double curly loop +2934..2935 ; Extended_Pictographic# 3.2 [2] (โคด๏ธ..โคต๏ธ) right arrow curving up..right arrow curving down +2B05..2B07 ; Extended_Pictographic# 4.0 [3] (โฌ…๏ธ..โฌ‡๏ธ) left arrow..down arrow +2B1B..2B1C ; Extended_Pictographic# 5.1 [2] (โฌ›..โฌœ) black large square..white large square +2B50 ; Extended_Pictographic# 5.1 [1] (โญ) star +2B55 ; Extended_Pictographic# 5.2 [1] (โญ•) heavy large circle +3030 ; Extended_Pictographic# 1.1 [1] (ใ€ฐ๏ธ) wavy dash +303D ; Extended_Pictographic# 3.2 [1] (ใ€ฝ๏ธ) part alternation mark +3297 ; Extended_Pictographic# 1.1 [1] (ใŠ—๏ธ) Japanese โ€œcongratulationsโ€ button +3299 ; Extended_Pictographic# 1.1 [1] (ใŠ™๏ธ) Japanese โ€œsecretโ€ button +1F000..1F02B ; Extended_Pictographic# 5.1 [44] (๐Ÿ€€๏ธ..๐Ÿ€ซ๏ธ) MAHJONG TILE EAST WIND..MAHJONG TILE BACK +1F02C..1F02F ; Extended_Pictographic# NA [4] (๐Ÿ€ฌ๏ธ..๐Ÿ€ฏ๏ธ) .. +1F030..1F093 ; Extended_Pictographic# 5.1[100] (๐Ÿ€ฐ๏ธ..๐Ÿ‚“๏ธ) DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 +1F094..1F09F ; Extended_Pictographic# NA [12] (๐Ÿ‚”๏ธ..๐Ÿ‚Ÿ๏ธ) .. +1F0A0..1F0AE ; Extended_Pictographic# 6.0 [15] (๐Ÿ‚ ๏ธ..๐Ÿ‚ฎ๏ธ) PLAYING CARD BACK..PLAYING CARD KING OF SPADES +1F0AF..1F0B0 ; Extended_Pictographic# NA [2] (๐Ÿ‚ฏ๏ธ..๐Ÿ‚ฐ๏ธ) .. +1F0B1..1F0BE ; Extended_Pictographic# 6.0 [14] (๐Ÿ‚ฑ๏ธ..๐Ÿ‚พ๏ธ) PLAYING CARD ACE OF HEARTS..PLAYING CARD KING OF HEARTS +1F0BF ; Extended_Pictographic# 7.0 [1] (๐Ÿ‚ฟ๏ธ) PLAYING CARD RED JOKER +1F0C0 ; Extended_Pictographic# NA [1] (๐Ÿƒ€๏ธ) +1F0C1..1F0CF ; Extended_Pictographic# 6.0 [15] (๐Ÿƒ๏ธ..๐Ÿƒ) PLAYING CARD ACE OF DIAMONDS..joker +1F0D0 ; Extended_Pictographic# NA [1] (๐Ÿƒ๏ธ) +1F0D1..1F0DF ; Extended_Pictographic# 6.0 [15] (๐Ÿƒ‘๏ธ..๐ŸƒŸ๏ธ) PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER +1F0E0..1F0F5 ; Extended_Pictographic# 7.0 [22] (๐Ÿƒ ๏ธ..๐Ÿƒต๏ธ) PLAYING CARD FOOL..PLAYING CARD TRUMP-21 +1F0F6..1F0FF ; Extended_Pictographic# NA [10] (๐Ÿƒถ๏ธ..๐Ÿƒฟ๏ธ) .. +1F10D..1F10F ; Extended_Pictographic# NA [3] (๐Ÿ„๏ธ..๐Ÿ„๏ธ) .. +1F12F ; Extended_Pictographic# 11.0 [1] (๐Ÿ„ฏ๏ธ) COPYLEFT SYMBOL +1F16C..1F16F ; Extended_Pictographic# NA [4] (๐Ÿ…ฌ๏ธ..๐Ÿ…ฏ๏ธ) .. +1F170..1F171 ; Extended_Pictographic# 6.0 [2] (๐Ÿ…ฐ๏ธ..๐Ÿ…ฑ๏ธ) A button (blood type)..B button (blood type) +1F17E ; Extended_Pictographic# 6.0 [1] (๐Ÿ…พ๏ธ) O button (blood type) +1F17F ; Extended_Pictographic# 5.2 [1] (๐Ÿ…ฟ๏ธ) P button +1F18E ; Extended_Pictographic# 6.0 [1] (๐Ÿ†Ž) AB button (blood type) +1F191..1F19A ; Extended_Pictographic# 6.0 [10] (๐Ÿ†‘..๐Ÿ†š) CL button..VS button +1F1AD..1F1E5 ; Extended_Pictographic# NA [57] (๐Ÿ†ญ๏ธ..๐Ÿ‡ฅ๏ธ) .. +1F201..1F202 ; Extended_Pictographic# 6.0 [2] (๐Ÿˆ..๐Ÿˆ‚๏ธ) Japanese โ€œhereโ€ button..Japanese โ€œservice chargeโ€ button +1F203..1F20F ; Extended_Pictographic# NA [13] (๐Ÿˆƒ๏ธ..๐Ÿˆ๏ธ) .. +1F21A ; Extended_Pictographic# 5.2 [1] (๐Ÿˆš) Japanese โ€œfree of chargeโ€ button +1F22F ; Extended_Pictographic# 5.2 [1] (๐Ÿˆฏ) Japanese โ€œreservedโ€ button +1F232..1F23A ; Extended_Pictographic# 6.0 [9] (๐Ÿˆฒ..๐Ÿˆบ) Japanese โ€œprohibitedโ€ button..Japanese โ€œopen for businessโ€ button +1F23C..1F23F ; Extended_Pictographic# NA [4] (๐Ÿˆผ๏ธ..๐Ÿˆฟ๏ธ) .. +1F249..1F24F ; Extended_Pictographic# NA [7] (๐Ÿ‰‰๏ธ..๐Ÿ‰๏ธ) .. +1F250..1F251 ; Extended_Pictographic# 6.0 [2] (๐Ÿ‰..๐Ÿ‰‘) Japanese โ€œbargainโ€ button..Japanese โ€œacceptableโ€ button +1F252..1F25F ; Extended_Pictographic# NA [14] (๐Ÿ‰’๏ธ..๐Ÿ‰Ÿ๏ธ) .. +1F260..1F265 ; Extended_Pictographic# 10.0 [6] (๐Ÿ‰ ๏ธ..๐Ÿ‰ฅ๏ธ) ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI +1F266..1F2FF ; Extended_Pictographic# NA[154] (๐Ÿ‰ฆ๏ธ..๐Ÿ‹ฟ๏ธ) .. +1F300..1F320 ; Extended_Pictographic# 6.0 [33] (๐ŸŒ€..๐ŸŒ ) cyclone..shooting star +1F321..1F32C ; Extended_Pictographic# 7.0 [12] (๐ŸŒก๏ธ..๐ŸŒฌ๏ธ) thermometer..wind face +1F32D..1F32F ; Extended_Pictographic# 8.0 [3] (๐ŸŒญ..๐ŸŒฏ) hot dog..burrito +1F330..1F335 ; Extended_Pictographic# 6.0 [6] (๐ŸŒฐ..๐ŸŒต) chestnut..cactus +1F336 ; Extended_Pictographic# 7.0 [1] (๐ŸŒถ๏ธ) hot pepper +1F337..1F37C ; Extended_Pictographic# 6.0 [70] (๐ŸŒท..๐Ÿผ) tulip..baby bottle +1F37D ; Extended_Pictographic# 7.0 [1] (๐Ÿฝ๏ธ) fork and knife with plate +1F37E..1F37F ; Extended_Pictographic# 8.0 [2] (๐Ÿพ..๐Ÿฟ) bottle with popping cork..popcorn +1F380..1F393 ; Extended_Pictographic# 6.0 [20] (๐ŸŽ€..๐ŸŽ“) ribbon..graduation cap +1F394..1F39F ; Extended_Pictographic# 7.0 [12] (๐ŸŽ”๏ธ..๐ŸŽŸ๏ธ) HEART WITH TIP ON THE LEFT..admission tickets +1F3A0..1F3C4 ; Extended_Pictographic# 6.0 [37] (๐ŸŽ ..๐Ÿ„) carousel horse..person surfing +1F3C5 ; Extended_Pictographic# 7.0 [1] (๐Ÿ…) sports medal +1F3C6..1F3CA ; Extended_Pictographic# 6.0 [5] (๐Ÿ†..๐ŸŠ) trophy..person swimming +1F3CB..1F3CE ; Extended_Pictographic# 7.0 [4] (๐Ÿ‹๏ธ..๐ŸŽ๏ธ) person lifting weights..racing car +1F3CF..1F3D3 ; Extended_Pictographic# 8.0 [5] (๐Ÿ..๐Ÿ“) cricket game..ping pong +1F3D4..1F3DF ; Extended_Pictographic# 7.0 [12] (๐Ÿ”๏ธ..๐ŸŸ๏ธ) snow-capped mountain..stadium +1F3E0..1F3F0 ; Extended_Pictographic# 6.0 [17] (๐Ÿ ..๐Ÿฐ) house..castle +1F3F1..1F3F7 ; Extended_Pictographic# 7.0 [7] (๐Ÿฑ๏ธ..๐Ÿท๏ธ) WHITE PENNANT..label +1F3F8..1F3FA ; Extended_Pictographic# 8.0 [3] (๐Ÿธ..๐Ÿบ) badminton..amphora +1F400..1F43E ; Extended_Pictographic# 6.0 [63] (๐Ÿ€..๐Ÿพ) rat..paw prints +1F43F ; Extended_Pictographic# 7.0 [1] (๐Ÿฟ๏ธ) chipmunk +1F440 ; Extended_Pictographic# 6.0 [1] (๐Ÿ‘€) eyes +1F441 ; Extended_Pictographic# 7.0 [1] (๐Ÿ‘๏ธ) eye +1F442..1F4F7 ; Extended_Pictographic# 6.0[182] (๐Ÿ‘‚..๐Ÿ“ท) ear..camera +1F4F8 ; Extended_Pictographic# 7.0 [1] (๐Ÿ“ธ) camera with flash +1F4F9..1F4FC ; Extended_Pictographic# 6.0 [4] (๐Ÿ“น..๐Ÿ“ผ) video camera..videocassette +1F4FD..1F4FE ; Extended_Pictographic# 7.0 [2] (๐Ÿ“ฝ๏ธ..๐Ÿ“พ๏ธ) film projector..PORTABLE STEREO +1F4FF ; Extended_Pictographic# 8.0 [1] (๐Ÿ“ฟ) prayer beads +1F500..1F53D ; Extended_Pictographic# 6.0 [62] (๐Ÿ”€..๐Ÿ”ฝ) shuffle tracks button..downwards button +1F546..1F54A ; Extended_Pictographic# 7.0 [5] (๐Ÿ•†๏ธ..๐Ÿ•Š๏ธ) WHITE LATIN CROSS..dove +1F54B..1F54F ; Extended_Pictographic# 8.0 [5] (๐Ÿ•‹..๐Ÿ•๏ธ) kaaba..BOWL OF HYGIEIA +1F550..1F567 ; Extended_Pictographic# 6.0 [24] (๐Ÿ•..๐Ÿ•ง) one oโ€™clock..twelve-thirty +1F568..1F579 ; Extended_Pictographic# 7.0 [18] (๐Ÿ•จ๏ธ..๐Ÿ•น๏ธ) RIGHT SPEAKER..joystick +1F57A ; Extended_Pictographic# 9.0 [1] (๐Ÿ•บ) man dancing +1F57B..1F5A3 ; Extended_Pictographic# 7.0 [41] (๐Ÿ•ป๏ธ..๐Ÿ–ฃ๏ธ) LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX +1F5A4 ; Extended_Pictographic# 9.0 [1] (๐Ÿ–ค) black heart +1F5A5..1F5FA ; Extended_Pictographic# 7.0 [86] (๐Ÿ–ฅ๏ธ..๐Ÿ—บ๏ธ) desktop computer..world map +1F5FB..1F5FF ; Extended_Pictographic# 6.0 [5] (๐Ÿ—ป..๐Ÿ—ฟ) mount fuji..moai +1F600 ; Extended_Pictographic# 6.1 [1] (๐Ÿ˜€) grinning face +1F601..1F610 ; Extended_Pictographic# 6.0 [16] (๐Ÿ˜..๐Ÿ˜) beaming face with smiling eyes..neutral face +1F611 ; Extended_Pictographic# 6.1 [1] (๐Ÿ˜‘) expressionless face +1F612..1F614 ; Extended_Pictographic# 6.0 [3] (๐Ÿ˜’..๐Ÿ˜”) unamused face..pensive face +1F615 ; Extended_Pictographic# 6.1 [1] (๐Ÿ˜•) confused face +1F616 ; Extended_Pictographic# 6.0 [1] (๐Ÿ˜–) confounded face +1F617 ; Extended_Pictographic# 6.1 [1] (๐Ÿ˜—) kissing face +1F618 ; Extended_Pictographic# 6.0 [1] (๐Ÿ˜˜) face blowing a kiss +1F619 ; Extended_Pictographic# 6.1 [1] (๐Ÿ˜™) kissing face with smiling eyes +1F61A ; Extended_Pictographic# 6.0 [1] (๐Ÿ˜š) kissing face with closed eyes +1F61B ; Extended_Pictographic# 6.1 [1] (๐Ÿ˜›) face with tongue +1F61C..1F61E ; Extended_Pictographic# 6.0 [3] (๐Ÿ˜œ..๐Ÿ˜ž) winking face with tongue..disappointed face +1F61F ; Extended_Pictographic# 6.1 [1] (๐Ÿ˜Ÿ) worried face +1F620..1F625 ; Extended_Pictographic# 6.0 [6] (๐Ÿ˜ ..๐Ÿ˜ฅ) angry face..sad but relieved face +1F626..1F627 ; Extended_Pictographic# 6.1 [2] (๐Ÿ˜ฆ..๐Ÿ˜ง) frowning face with open mouth..anguished face +1F628..1F62B ; Extended_Pictographic# 6.0 [4] (๐Ÿ˜จ..๐Ÿ˜ซ) fearful face..tired face +1F62C ; Extended_Pictographic# 6.1 [1] (๐Ÿ˜ฌ) grimacing face +1F62D ; Extended_Pictographic# 6.0 [1] (๐Ÿ˜ญ) loudly crying face +1F62E..1F62F ; Extended_Pictographic# 6.1 [2] (๐Ÿ˜ฎ..๐Ÿ˜ฏ) face with open mouth..hushed face +1F630..1F633 ; Extended_Pictographic# 6.0 [4] (๐Ÿ˜ฐ..๐Ÿ˜ณ) anxious face with sweat..flushed face +1F634 ; Extended_Pictographic# 6.1 [1] (๐Ÿ˜ด) sleeping face +1F635..1F640 ; Extended_Pictographic# 6.0 [12] (๐Ÿ˜ต..๐Ÿ™€) dizzy face..weary cat face +1F641..1F642 ; Extended_Pictographic# 7.0 [2] (๐Ÿ™..๐Ÿ™‚) slightly frowning face..slightly smiling face +1F643..1F644 ; Extended_Pictographic# 8.0 [2] (๐Ÿ™ƒ..๐Ÿ™„) upside-down face..face with rolling eyes +1F645..1F64F ; Extended_Pictographic# 6.0 [11] (๐Ÿ™…..๐Ÿ™) person gesturing NO..folded hands +1F680..1F6C5 ; Extended_Pictographic# 6.0 [70] (๐Ÿš€..๐Ÿ›…) rocket..left luggage +1F6C6..1F6CF ; Extended_Pictographic# 7.0 [10] (๐Ÿ›†๏ธ..๐Ÿ›๏ธ) TRIANGLE WITH ROUNDED CORNERS..bed +1F6D0 ; Extended_Pictographic# 8.0 [1] (๐Ÿ›) place of worship +1F6D1..1F6D2 ; Extended_Pictographic# 9.0 [2] (๐Ÿ›‘..๐Ÿ›’) stop sign..shopping cart +1F6D3..1F6D4 ; Extended_Pictographic# 10.0 [2] (๐Ÿ›“๏ธ..๐Ÿ›”๏ธ) STUPA..PAGODA +1F6D5..1F6DF ; Extended_Pictographic# NA [11] (๐Ÿ›•๏ธ..๐Ÿ›Ÿ๏ธ) .. +1F6E0..1F6EC ; Extended_Pictographic# 7.0 [13] (๐Ÿ› ๏ธ..๐Ÿ›ฌ) hammer and wrench..airplane arrival +1F6ED..1F6EF ; Extended_Pictographic# NA [3] (๐Ÿ›ญ๏ธ..๐Ÿ›ฏ๏ธ) .. +1F6F0..1F6F3 ; Extended_Pictographic# 7.0 [4] (๐Ÿ›ฐ๏ธ..๐Ÿ›ณ๏ธ) satellite..passenger ship +1F6F4..1F6F6 ; Extended_Pictographic# 9.0 [3] (๐Ÿ›ด..๐Ÿ›ถ) kick scooter..canoe +1F6F7..1F6F8 ; Extended_Pictographic# 10.0 [2] (๐Ÿ›ท..๐Ÿ›ธ) sled..flying saucer +1F6F9 ; Extended_Pictographic# 11.0 [1] (๐Ÿ›น) skateboard +1F6FA..1F6FF ; Extended_Pictographic# NA [6] (๐Ÿ›บ๏ธ..๐Ÿ›ฟ๏ธ) .. +1F774..1F77F ; Extended_Pictographic# NA [12] (๐Ÿด๏ธ..๐Ÿฟ๏ธ) .. +1F7D5..1F7D8 ; Extended_Pictographic# 11.0 [4] (๐ŸŸ•๏ธ..๐ŸŸ˜๏ธ) CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE +1F7D9..1F7FF ; Extended_Pictographic# NA [39] (๐ŸŸ™๏ธ..๐ŸŸฟ๏ธ) .. +1F80C..1F80F ; Extended_Pictographic# NA [4] (๐Ÿ Œ๏ธ..๐Ÿ ๏ธ) .. +1F848..1F84F ; Extended_Pictographic# NA [8] (๐Ÿกˆ๏ธ..๐Ÿก๏ธ) .. +1F85A..1F85F ; Extended_Pictographic# NA [6] (๐Ÿกš๏ธ..๐ŸกŸ๏ธ) .. +1F888..1F88F ; Extended_Pictographic# NA [8] (๐Ÿขˆ๏ธ..๐Ÿข๏ธ) .. +1F8AE..1F8FF ; Extended_Pictographic# NA [82] (๐Ÿขฎ๏ธ..๐Ÿฃฟ๏ธ) .. +1F90C..1F90F ; Extended_Pictographic# NA [4] (๐ŸคŒ๏ธ..๐Ÿค๏ธ) .. +1F910..1F918 ; Extended_Pictographic# 8.0 [9] (๐Ÿค..๐Ÿค˜) zipper-mouth face..sign of the horns +1F919..1F91E ; Extended_Pictographic# 9.0 [6] (๐Ÿค™..๐Ÿคž) call me hand..crossed fingers +1F91F ; Extended_Pictographic# 10.0 [1] (๐ŸคŸ) love-you gesture +1F920..1F927 ; Extended_Pictographic# 9.0 [8] (๐Ÿค ..๐Ÿคง) cowboy hat face..sneezing face +1F928..1F92F ; Extended_Pictographic# 10.0 [8] (๐Ÿคจ..๐Ÿคฏ) face with raised eyebrow..exploding head +1F930 ; Extended_Pictographic# 9.0 [1] (๐Ÿคฐ) pregnant woman +1F931..1F932 ; Extended_Pictographic# 10.0 [2] (๐Ÿคฑ..๐Ÿคฒ) breast-feeding..palms up together +1F933..1F93A ; Extended_Pictographic# 9.0 [8] (๐Ÿคณ..๐Ÿคบ) selfie..person fencing +1F93C..1F93E ; Extended_Pictographic# 9.0 [3] (๐Ÿคผ..๐Ÿคพ) people wrestling..person playing handball +1F93F ; Extended_Pictographic# NA [1] (๐Ÿคฟ๏ธ) +1F940..1F945 ; Extended_Pictographic# 9.0 [6] (๐Ÿฅ€..๐Ÿฅ…) wilted flower..goal net +1F947..1F94B ; Extended_Pictographic# 9.0 [5] (๐Ÿฅ‡..๐Ÿฅ‹) 1st place medal..martial arts uniform +1F94C ; Extended_Pictographic# 10.0 [1] (๐ŸฅŒ) curling stone +1F94D..1F94F ; Extended_Pictographic# 11.0 [3] (๐Ÿฅ..๐Ÿฅ) lacrosse..flying disc +1F950..1F95E ; Extended_Pictographic# 9.0 [15] (๐Ÿฅ..๐Ÿฅž) croissant..pancakes +1F95F..1F96B ; Extended_Pictographic# 10.0 [13] (๐ŸฅŸ..๐Ÿฅซ) dumpling..canned food +1F96C..1F970 ; Extended_Pictographic# 11.0 [5] (๐Ÿฅฌ..๐Ÿฅฐ) leafy green..smiling face with 3 hearts +1F971..1F972 ; Extended_Pictographic# NA [2] (๐Ÿฅฑ๏ธ..๐Ÿฅฒ๏ธ) .. +1F973..1F976 ; Extended_Pictographic# 11.0 [4] (๐Ÿฅณ..๐Ÿฅถ) partying face..cold face +1F977..1F979 ; Extended_Pictographic# NA [3] (๐Ÿฅท๏ธ..๐Ÿฅน๏ธ) .. +1F97A ; Extended_Pictographic# 11.0 [1] (๐Ÿฅบ) pleading face +1F97B ; Extended_Pictographic# NA [1] (๐Ÿฅป๏ธ) +1F97C..1F97F ; Extended_Pictographic# 11.0 [4] (๐Ÿฅผ..๐Ÿฅฟ) lab coat..womanโ€™s flat shoe +1F980..1F984 ; Extended_Pictographic# 8.0 [5] (๐Ÿฆ€..๐Ÿฆ„) crab..unicorn face +1F985..1F991 ; Extended_Pictographic# 9.0 [13] (๐Ÿฆ…..๐Ÿฆ‘) eagle..squid +1F992..1F997 ; Extended_Pictographic# 10.0 [6] (๐Ÿฆ’..๐Ÿฆ—) giraffe..cricket +1F998..1F9A2 ; Extended_Pictographic# 11.0 [11] (๐Ÿฆ˜..๐Ÿฆข) kangaroo..swan +1F9A3..1F9AF ; Extended_Pictographic# NA [13] (๐Ÿฆฃ๏ธ..๐Ÿฆฏ๏ธ) .. +1F9B0..1F9B9 ; Extended_Pictographic# 11.0 [10] (๐Ÿฆฐ..๐Ÿฆน) red-haired..supervillain +1F9BA..1F9BF ; Extended_Pictographic# NA [6] (๐Ÿฆบ๏ธ..๐Ÿฆฟ๏ธ) .. +1F9C0 ; Extended_Pictographic# 8.0 [1] (๐Ÿง€) cheese wedge +1F9C1..1F9C2 ; Extended_Pictographic# 11.0 [2] (๐Ÿง..๐Ÿง‚) cupcake..salt +1F9C3..1F9CF ; Extended_Pictographic# NA [13] (๐Ÿงƒ๏ธ..๐Ÿง๏ธ) .. +1F9D0..1F9E6 ; Extended_Pictographic# 10.0 [23] (๐Ÿง..๐Ÿงฆ) face with monocle..socks +1F9E7..1F9FF ; Extended_Pictographic# 11.0 [25] (๐Ÿงง..๐Ÿงฟ) red envelope..nazar amulet +1FA00..1FA5F ; Extended_Pictographic# NA [96] (๐Ÿจ€๏ธ..๐ŸฉŸ๏ธ) .. +1FA60..1FA6D ; Extended_Pictographic# 11.0 [14] (๐Ÿฉ ๏ธ..๐Ÿฉญ๏ธ) XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER +1FA6E..1FFFD ; Extended_Pictographic# NA[1424] (๐Ÿฉฎ๏ธ..๐Ÿฟฝ๏ธ) .. + +# Total elements: 3793 + +#EOF diff --git a/Project/Tools/emoji-list.txt b/Project/Tools/emoji-list.txt new file mode 100644 index 0000000..9bc456f --- /dev/null +++ b/Project/Tools/emoji-list.txt @@ -0,0 +1,1027 @@ +๐Ÿ€„ +๐Ÿงฑ +๐Ÿงฒ +๐Ÿงณ +๐Ÿงด +๐Ÿงต +๐Ÿงถ +๐Ÿƒ +๐Ÿค +๐Ÿค‘ +๐Ÿค’ +๐Ÿค“ +๐Ÿค” +๐Ÿค• +๐Ÿค– +๐Ÿค— +๐Ÿค˜ +๐Ÿค™ +๐Ÿคš +๐Ÿค› +๐Ÿคœ +๐Ÿค +๐Ÿคž +๐ŸคŸ +๐Ÿค  +๐Ÿคก +๐Ÿคข +๐Ÿคฃ +๐Ÿคค +๐Ÿคฅ +๐Ÿคฆ +๐Ÿคง +๐Ÿคจ +๐Ÿคฉ +๐Ÿคช +๐Ÿคซ +๐Ÿคฌ +๐Ÿคญ +๐Ÿคฎ +๐Ÿคฏ +๐Ÿคฐ +๐Ÿคฑ +๐Ÿคฒ +๐Ÿคณ +๐Ÿคด +๐Ÿคต +๐Ÿคถ +๐Ÿคท +๐Ÿคธ +๐Ÿคน +๐Ÿคบ +๐Ÿคผ +๐Ÿคฝ +๐Ÿคพ +๐Ÿฅ€ +๐Ÿฅ +๐Ÿฅ‚ +๐Ÿฅƒ +๐Ÿฅ„ +๐Ÿฅ… +๐Ÿฅ‡ +๐Ÿฅˆ +๐Ÿฅ‰ +๐ŸฅŠ +๐Ÿฅ‹ +๐ŸฅŒ +๐Ÿฅ +๐ŸฅŽ +๐Ÿฅ +๐Ÿฅ +๐Ÿฅ‘ +๐Ÿฅ’ +๐Ÿฅ“ +๐Ÿฅ” +๐Ÿฅ• +๐Ÿฅ– +๐Ÿฅ— +๐Ÿฅ˜ +๐Ÿฅ™ +๐Ÿฅš +๐Ÿฅ› +๐Ÿฅœ +๐Ÿฅ +๐Ÿฅž +๐ŸฅŸ +๐Ÿฅ  +๐Ÿฅก +๐Ÿฅข +๐Ÿฅฃ +๐Ÿฅค +๐Ÿฅฅ +๐Ÿฅฆ +๐Ÿฅง +๐Ÿฅจ +๐Ÿฅฉ +๐Ÿฅช +๐Ÿฅซ +๐Ÿฅฌ +๐Ÿฅญ +๐Ÿฅฎ +๐Ÿฅฏ +๐Ÿฅฐ +๐Ÿงฌ +๐Ÿงญ +๐Ÿฅณ +๐Ÿฅด +๐Ÿฅต +๐Ÿฅถ +๐Ÿงฎ +๐Ÿฅบ +๐Ÿงฏ +๐Ÿฅผ +๐Ÿฅฝ +๐Ÿฅพ +๐Ÿฅฟ +๐Ÿฆ€ +๐Ÿฆ +๐Ÿฆ‚ +๐Ÿฆƒ +๐Ÿฆ„ +๐Ÿฆ… +๐Ÿฆ† +๐Ÿฆ‡ +๐Ÿฆˆ +๐Ÿฆ‰ +๐ŸฆŠ +๐Ÿฆ‹ +๐ŸฆŒ +๐Ÿฆ +๐Ÿ†Ž +๐ŸฆŽ +๐Ÿฆ +๐Ÿ†‘ +๐Ÿ†’ +๐Ÿ†“ +๐Ÿ†” +๐Ÿ†• +๐Ÿ†– +๐Ÿ†— +๐Ÿ†˜ +๐Ÿ†™ +๐Ÿ†š +๐Ÿฆ’ +๐Ÿฆ“ +๐Ÿฆ” +๐Ÿฆ• +๐Ÿฆ– +๐Ÿฆ— +๐Ÿฆ˜ +๐Ÿฆ™ +๐Ÿฆš +๐Ÿฆ› +๐Ÿฆœ +๐Ÿฆ +๐Ÿฆž +๐ŸฆŸ +๐Ÿฆ  +๐Ÿฆก +๐Ÿฆข +๐Ÿงธ +๐Ÿฆฐ +๐Ÿฆฑ +๐Ÿฆฒ +๐Ÿฆณ +๐Ÿฆด +๐Ÿฆต +๐Ÿฆถ +๐Ÿฆท +๐Ÿฆธ +๐Ÿฆน +๐Ÿง€ +๐Ÿง +๐Ÿง‚ +๐Ÿง +๐Ÿง‘ +๐Ÿง’ +๐Ÿง“ +๐Ÿง” +๐Ÿง• +๐Ÿง– +๐Ÿง— +๐Ÿง˜ +๐Ÿง™ +๐Ÿงš +๐Ÿง› +๐Ÿงœ +๐Ÿง +๐Ÿงž +๐ŸงŸ +๐Ÿง  +๐Ÿงก +๐Ÿงข +๐Ÿงฃ +๐Ÿงค +๐Ÿงฅ +๐Ÿ‡ฆ +๐Ÿ‡ง +๐Ÿ‡จ +๐Ÿ‡ฉ +๐Ÿ‡ช +๐Ÿ‡ซ +๐Ÿ‡ฌ +๐Ÿ‡ญ +๐Ÿ‡ฎ +๐Ÿ‡ฏ +๐Ÿ‡ฐ +๐Ÿ‡ฑ +๐Ÿ‡ฒ +๐Ÿ‡ณ +๐Ÿ‡ด +๐Ÿ‡ต +๐Ÿ‡ถ +๐Ÿ‡ท +๐Ÿ‡ธ +๐Ÿ‡น +๐Ÿ‡บ +๐Ÿ‡ป +๐Ÿ‡ผ +๐Ÿ‡ฝ +๐Ÿ‡พ +๐Ÿ‡ฟ +๐Ÿงท +๐Ÿˆ +๐Ÿงน +๐Ÿงบ +๐Ÿงป +๐Ÿงผ +๐Ÿงฝ +๐Ÿงพ +๐Ÿงฟ +๐Ÿˆš +๐Ÿˆฏ +๐Ÿˆฒ +๐Ÿˆณ +๐Ÿˆด +๐Ÿˆต +๐Ÿˆถ +๐Ÿˆธ +๐Ÿˆน +๐Ÿˆบ +๐Ÿ‰ +๐Ÿ‰‘ +๐ŸŒ€ +๐ŸŒ +๐ŸŒ‚ +๐ŸŒƒ +๐ŸŒ„ +๐ŸŒ… +๐ŸŒ† +๐ŸŒ‡ +๐ŸŒˆ +๐ŸŒ‰ +๐ŸŒŠ +๐ŸŒ‹ +๐ŸŒŒ +๐ŸŒ +๐ŸŒŽ +๐ŸŒ +๐ŸŒ +๐ŸŒ‘ +๐ŸŒ’ +๐ŸŒ“ +๐ŸŒ” +๐ŸŒ• +๐ŸŒ– +๐ŸŒ— +๐ŸŒ˜ +๐ŸŒ™ +โŒš +โŒ› +โฌ› +โฌœ +๐ŸŒš +๐ŸŒ› +๐ŸŒœ +๐ŸŒ +๐ŸŒž +๐ŸŒŸ +๐ŸŒ  +๐ŸŒญ +๐ŸŒฎ +๐ŸŒฏ +๐ŸŒฐ +๐ŸŒฑ +๐ŸŒฒ +๐ŸŒณ +๐ŸŒด +๐ŸŒต +๐ŸŒท +๐ŸŒธ +๐ŸŒน +๐ŸŒบ +๐ŸŒป +๐ŸŒผ +๐ŸŒฝ +๐ŸŒพ +๐ŸŒฟ +๐Ÿ€ +๐Ÿ +๐Ÿ‚ +๐Ÿƒ +๐Ÿ„ +๐Ÿ… +๐Ÿ† +๐Ÿ‡ +๐Ÿˆ +๐Ÿ‰ +๐ŸŠ +๐Ÿ‹ +๐ŸŒ +๐Ÿ +๐ŸŽ +๐Ÿ +โญ +๐Ÿ +๐Ÿ‘ +๐Ÿ’ +๐Ÿ“ +โญ• +๐Ÿ” +๐Ÿ• +๐Ÿ– +๐Ÿ— +๐Ÿ˜ +๐Ÿ™ +๐Ÿš +๐Ÿ› +๐Ÿœ +๐ŸŸ +๐Ÿ +๐Ÿž +๐Ÿ  +๐Ÿก +๐Ÿค +๐Ÿข +๐Ÿฃ +๐Ÿฅ +๐Ÿฆ +๐Ÿฉ +๐Ÿง +๐Ÿจ +๐Ÿช +๐Ÿซ +๐Ÿฎ +๐Ÿฌ +๐Ÿญ +๐Ÿฏ +๐Ÿฐ +๐Ÿณ +๐Ÿฑ +๐Ÿฒ +๐Ÿด +๐Ÿต +๐Ÿธ +๐Ÿถ +๐Ÿท +๐Ÿน +๐Ÿบ +๐Ÿป +๐Ÿผ +๐Ÿพ +๐Ÿฟ +๐ŸŽ€ +๐ŸŽ +๐ŸŽ‚ +๐ŸŽƒ +๐ŸŽ… +๐ŸŽ„ +๐ŸŽ† +๐ŸŽˆ +๐ŸŽ‰ +๐ŸŽŠ +๐ŸŽ‹ +๐ŸŽŒ +๐ŸŽ +๐ŸŽ‡ +๐ŸŽ +๐ŸŽ +๐ŸŽŽ +๐ŸŽ‘ +๐ŸŽ’ +๐ŸŽ“ +๐ŸŽ  +๐ŸŽก +๐ŸŽข +๐ŸŽฃ +๐ŸŽค +๐ŸŽฅ +๐ŸŽฆ +๐ŸŽง +๐ŸŽจ +๐ŸŽฉ +๐ŸŽช +๐ŸŽซ +๐ŸŽฌ +๐ŸŽญ +๐ŸŽฎ +๐ŸŽฏ +๐ŸŽฐ +๐ŸŽฑ +๐ŸŽฒ +๐ŸŽณ +๐ŸŽด +๐ŸŽต +๐ŸŽถ +๐ŸŽท +๐ŸŽธ +๐ŸŽน +๐ŸŽบ +๐ŸŽป +๐ŸŽผ +๐ŸŽฝ +๐ŸŽพ +๐ŸŽฟ +๐Ÿ€ +๐Ÿ +๐Ÿ‚ +๐Ÿƒ +๐Ÿ„ +๐Ÿ… +๐Ÿ† +๐Ÿ‡ +๐Ÿˆ +๐Ÿ‰ +๐ŸŠ +๐Ÿ +๐Ÿ +๐Ÿ‘ +๐Ÿ’ +๐Ÿ“ +๐Ÿ  +๐Ÿก +๐Ÿข +๐Ÿฃ +๐Ÿค +๐Ÿฅ +๐Ÿฆ +๐Ÿง +๐Ÿจ +๐Ÿฉ +๐Ÿช +๐Ÿซ +๐Ÿฌ +๐Ÿญ +๐Ÿฎ +๐Ÿฏ +๐Ÿฐ +โฉ +โช +โซ +๐Ÿด +โฌ +โฐ +โณ +๐Ÿธ +๐Ÿน +๐Ÿบ +๐Ÿ€ +๐Ÿ +๐Ÿ‚ +๐Ÿƒ +๐Ÿ„ +๐Ÿ… +๐Ÿ† +๐Ÿ‡ +๐Ÿˆ +๐Ÿ‰ +๐ŸŠ +๐Ÿ‹ +๐ŸŒ +๐Ÿ +๐ŸŽ +๐Ÿ +๐Ÿ +๐Ÿ‘ +๐Ÿ’ +๐Ÿ“ +๐Ÿ” +๐Ÿ• +๐Ÿ– +๐Ÿ— +๐Ÿ˜ +๐Ÿ™ +๐Ÿš +๐Ÿ› +๐Ÿœ +๐Ÿ +๐Ÿž +๐ŸŸ +๐Ÿ  +๐Ÿก +๐Ÿข +๐Ÿฃ +๐Ÿค +๐Ÿฅ +๐Ÿฆ +๐Ÿง +๐Ÿจ +๐Ÿฉ +๐Ÿช +๐Ÿซ +๐Ÿฌ +๐Ÿญ +๐Ÿฎ +๐Ÿฏ +๐Ÿฐ +๐Ÿฑ +๐Ÿฒ +๐Ÿณ +๐Ÿด +๐Ÿต +๐Ÿถ +๐Ÿท +๐Ÿธ +๐Ÿน +๐Ÿบ +๐Ÿป +๐Ÿผ +๐Ÿฝ +๐Ÿพ +๐Ÿ‘€ +๐Ÿ‘‚ +๐Ÿ‘ƒ +๐Ÿ‘„ +๐Ÿ‘… +๐Ÿ‘† +๐Ÿ‘‡ +๐Ÿ‘ˆ +๐Ÿ‘‰ +๐Ÿ‘Š +๐Ÿ‘‹ +๐Ÿ‘Œ +๐Ÿ‘ +๐Ÿ‘Ž +๐Ÿ‘ +๐Ÿ‘ +๐Ÿ‘‘ +๐Ÿ‘’ +๐Ÿ‘“ +๐Ÿ‘” +๐Ÿ‘• +๐Ÿ‘– +๐Ÿ‘— +๐Ÿ‘˜ +๐Ÿ‘™ +๐Ÿ‘š +๐Ÿ‘› +๐Ÿ‘œ +๐Ÿ‘ +๐Ÿ‘ž +๐Ÿ‘Ÿ +๐Ÿ‘  +๐Ÿ‘ก +๐Ÿ‘ข +๐Ÿ‘ฃ +๐Ÿ‘ค +๐Ÿ‘ฅ +๐Ÿ‘ฆ +๐Ÿ‘ง +๐Ÿ‘จ +๐Ÿ‘ฉ +๐Ÿ‘ช +๐Ÿ‘ซ +๐Ÿ‘ฌ +๐Ÿ‘ญ +๐Ÿ‘ฎ +๐Ÿ‘ฏ +๐Ÿ‘ฐ +๐Ÿ‘ฑ +๐Ÿ‘ฒ +๐Ÿ‘ณ +๐Ÿ‘ด +๐Ÿ‘ต +๐Ÿ‘ถ +๐Ÿ‘ท +๐Ÿ‘ธ +๐Ÿ‘น +๐Ÿ‘บ +๐Ÿ‘ป +๐Ÿ‘ผ +๐Ÿ‘ฝ +๐Ÿ‘พ +๐Ÿ‘ฟ +๐Ÿ’€ +๐Ÿ’ +๐Ÿ’‚ +๐Ÿ’ƒ +๐Ÿ’„ +๐Ÿ’… +๐Ÿ’† +๐Ÿ’‡ +๐Ÿ’ˆ +๐Ÿ’‰ +๐Ÿ’Š +๐Ÿ’‹ +๐Ÿ’Œ +๐Ÿ’ +๐Ÿ’Ž +๐Ÿ’ +๐Ÿ’ +๐Ÿ’‘ +๐Ÿ’’ +๐Ÿ’“ +๐Ÿ’” +๐Ÿ’• +๐Ÿ’– +๐Ÿ’— +๐Ÿ’˜ +๐Ÿ’™ +๐Ÿ’š +๐Ÿ’› +๐Ÿ’œ +๐Ÿ’ +๐Ÿ’ž +๐Ÿ’Ÿ +๐Ÿ’  +๐Ÿ’ก +๐Ÿ’ข +๐Ÿ’ฃ +๐Ÿ’ค +๐Ÿ’ฅ +๐Ÿ’ฆ +๐Ÿ’ง +๐Ÿ’จ +๐Ÿ’ฉ +๐Ÿ’ช +๐Ÿ’ซ +๐Ÿ’ฌ +๐Ÿ’ญ +๐Ÿ’ฎ +๐Ÿ’ฏ +๐Ÿ’ฐ +๐Ÿ’ฑ +๐Ÿ’ฒ +๐Ÿ’ณ +๐Ÿ’ด +๐Ÿ’ต +๐Ÿ’ถ +๐Ÿ’ท +๐Ÿ’ธ +๐Ÿ’น +๐Ÿ’บ +๐Ÿ’ป +๐Ÿ’ผ +๐Ÿ’ฝ +๐Ÿ’พ +๐Ÿ’ฟ +๐Ÿ“€ +๐Ÿ“ +๐Ÿ“‚ +๐Ÿ“ƒ +๐Ÿ“„ +๐Ÿ“… +๐Ÿ“† +๐Ÿ“‡ +๐Ÿ“ˆ +๐Ÿ“‰ +๐Ÿ“Š +๐Ÿ“‹ +๐Ÿ“Œ +๐Ÿ“ +๐Ÿ“Ž +๐Ÿ“ +๐Ÿ“ +๐Ÿ“‘ +๐Ÿ“’ +๐Ÿ““ +๐Ÿ“” +๐Ÿ“• +๐Ÿ“– +๐Ÿ“— +๐Ÿ“˜ +๐Ÿ“™ +๐Ÿ“š +๐Ÿ“› +๐Ÿ“œ +๐Ÿ“ +๐Ÿ“ž +๐Ÿ“Ÿ +๐Ÿ“  +๐Ÿ“ก +๐Ÿ“ข +๐Ÿ“ฃ +๐Ÿ“ค +๐Ÿ“ฅ +๐Ÿ“ฆ +๐Ÿ“ง +๐Ÿ“จ +๐Ÿ“ฉ +๐Ÿ“ช +๐Ÿ“ซ +๐Ÿ“ฌ +๐Ÿ“ญ +๐Ÿ“ฎ +๐Ÿ“ฏ +๐Ÿ“ฐ +๐Ÿ“ฑ +๐Ÿ“ฒ +๐Ÿ“ณ +๐Ÿ“ด +๐Ÿ“ต +๐Ÿ“ถ +๐Ÿ“ท +๐Ÿ“ธ +๐Ÿ“น +๐Ÿ“บ +๐Ÿ“ป +๐Ÿ“ผ +๐Ÿ“ฟ +๐Ÿ”€ +๐Ÿ” +๐Ÿ”‚ +๐Ÿ”ƒ +๐Ÿ”„ +๐Ÿ”… +๐Ÿ”† +๐Ÿ”‡ +๐Ÿ”ˆ +๐Ÿ”‰ +๐Ÿ”Š +๐Ÿ”‹ +๐Ÿ”Œ +๐Ÿ” +๐Ÿ”Ž +๐Ÿ” +๐Ÿ” +๐Ÿ”‘ +๐Ÿ”’ +๐Ÿ”“ +๐Ÿ”” +๐Ÿ”• +๐Ÿ”– +๐Ÿ”— +๐Ÿ”˜ +๐Ÿ”™ +๐Ÿ”š +๐Ÿ”› +๐Ÿ”œ +๐Ÿ” +๐Ÿ”ž +๐Ÿ”Ÿ +๐Ÿ”  +๐Ÿ”ก +๐Ÿ”ข +๐Ÿ”ฃ +๐Ÿ”ค +๐Ÿ”ฅ +๐Ÿ”ฆ +๐Ÿ”ง +๐Ÿ”จ +๐Ÿ”ฉ +๐Ÿ”ช +๐Ÿ”ซ +๐Ÿ”ฌ +๐Ÿ”ญ +๐Ÿ”ฎ +๐Ÿ”ฏ +๐Ÿ”ฐ +๐Ÿ”ฑ +๐Ÿ”ฒ +๐Ÿ”ณ +๐Ÿ”ด +๐Ÿ”ต +๐Ÿ”ถ +๐Ÿ”ท +๐Ÿ”ธ +๐Ÿ”น +๐Ÿ”บ +๐Ÿ”ป +๐Ÿ”ผ +๐Ÿ”ฝ +๐Ÿ•‹ +๐Ÿ•Œ +๐Ÿ• +๐Ÿ•Ž +๐Ÿ• +๐Ÿ•‘ +๐Ÿ•’ +๐Ÿ•“ +๐Ÿ•” +๐Ÿ•• +๐Ÿ•– +๐Ÿ•— +๐Ÿ•˜ +๐Ÿ•™ +๐Ÿ•š +๐Ÿ•› +๐Ÿ•œ +๐Ÿ• +๐Ÿ•ž +๐Ÿ•Ÿ +๐Ÿ•  +๐Ÿ•ก +๐Ÿ•ข +๐Ÿ•ฃ +๐Ÿ•ค +๐Ÿ•ฅ +๐Ÿ•ฆ +๐Ÿ•ง +๐Ÿ•บ +๐Ÿ–• +๐Ÿ–– +๐Ÿ–ค +๐Ÿ—ป +๐Ÿ—ผ +โ—ฝ +โ—พ +๐Ÿ—ฝ +๐Ÿ—พ +๐Ÿ—ฟ +๐Ÿ˜€ +๐Ÿ˜ +๐Ÿ˜‚ +๐Ÿ˜ƒ +๐Ÿ˜„ +๐Ÿ˜… +๐Ÿ˜† +๐Ÿ˜‡ +๐Ÿ˜ˆ +๐Ÿ˜‰ +๐Ÿ˜Š +๐Ÿ˜‹ +๐Ÿ˜Œ +๐Ÿ˜ +๐Ÿ˜Ž +๐Ÿ˜ +๐Ÿ˜ +๐Ÿ˜‘ +โ˜” +โ˜• +๐Ÿ˜’ +๐Ÿ˜“ +๐Ÿ˜” +๐Ÿ˜• +๐Ÿ˜– +๐Ÿ˜— +๐Ÿ˜˜ +๐Ÿ˜™ +๐Ÿ˜š +๐Ÿ˜› +๐Ÿ˜œ +๐Ÿ˜ +๐Ÿ˜ž +๐Ÿ˜Ÿ +๐Ÿ˜  +๐Ÿ˜ก +๐Ÿ˜ข +๐Ÿ˜ฃ +๐Ÿ˜ค +๐Ÿ˜ฅ +๐Ÿ˜ฆ +๐Ÿ˜ง +๐Ÿ˜จ +๐Ÿ˜ฉ +๐Ÿ˜ช +๐Ÿ˜ซ +๐Ÿ˜ฌ +๐Ÿ˜ญ +๐Ÿ˜ฎ +๐Ÿ˜ฏ +๐Ÿ˜ฐ +๐Ÿ˜ฑ +๐Ÿ˜ฒ +๐Ÿ˜ณ +๐Ÿ˜ด +๐Ÿ˜ต +๐Ÿ˜ถ +๐Ÿ˜ท +๐Ÿ˜ธ +๐Ÿ˜น +๐Ÿ˜บ +๐Ÿ˜ป +๐Ÿ˜ผ +๐Ÿ˜ฝ +๐Ÿ˜พ +๐Ÿ˜ฟ +๐Ÿ™€ +๐Ÿ™ +๐Ÿ™‚ +๐Ÿ™ƒ +โ™ˆ +โ™‰ +โ™Š +โ™‹ +โ™Œ +โ™ +โ™Ž +โ™ +โ™ +โ™‘ +โ™’ +โ™“ +๐Ÿ™‹ +๐Ÿ™Œ +๐Ÿ™ +๐Ÿ™Ž +๐Ÿ™ +โ™ฟ +๐Ÿš€ +๐Ÿš +๐Ÿš‚ +๐Ÿšƒ +๐Ÿš„ +๐Ÿš… +๐Ÿš† +๐Ÿš‡ +๐Ÿšˆ +๐Ÿš‰ +๐ŸšŠ +๐Ÿš‹ +๐ŸšŒ +๐Ÿš +๐ŸšŽ +๐Ÿš +๐Ÿš +๐Ÿš‘ +๐Ÿš’ +โš“ +๐Ÿš“ +๐Ÿš” +๐Ÿš• +๐Ÿš– +๐Ÿš— +๐Ÿš˜ +๐Ÿš™ +๐Ÿšš +๐Ÿš› +๐Ÿšœ +๐Ÿš +๐Ÿšž +๐ŸšŸ +โšก +๐Ÿš  +๐Ÿšก +๐Ÿšข +๐Ÿšฃ +๐Ÿšค +๐Ÿšฅ +๐Ÿšฆ +๐Ÿšง +โšช +โšซ +๐Ÿšจ +๐Ÿšฉ +๐Ÿšช +๐Ÿšซ +๐Ÿšฌ +๐Ÿšญ +๐Ÿšฎ +๐Ÿšฏ +๐Ÿšฐ +๐Ÿšฑ +๐Ÿšฒ +๐Ÿšณ +๐Ÿšด +๐Ÿšต +๐Ÿšถ +๐Ÿšท +๐Ÿšธ +โšฝ +โšพ +๐Ÿšน +๐Ÿšบ +๐Ÿšป +๐Ÿšผ +๐Ÿšฝ +โ›„ +โ›… +๐Ÿšพ +๐Ÿšฟ +๐Ÿ›€ +๐Ÿ› +๐Ÿ›‚ +๐Ÿ›ƒ +๐Ÿ›„ +๐Ÿ›… +โ›Ž +๐Ÿ›Œ +๐Ÿ› +๐Ÿ›‘ +๐Ÿ›’ +โ›” +โ›ช +๐Ÿ›ซ +๐Ÿ›ฌ +โ›ฒ +โ›ณ +๐Ÿ›ด +โ›ต +๐Ÿ›ต +๐Ÿ›ถ +๐Ÿ›ท +๐Ÿ›ธ +โ›บ +๐Ÿ›น +โ›ฝ +โœ… +๐Ÿงฆ +๐Ÿ™„ +โœŠ +โœ‹ +๐Ÿ™… +๐Ÿ™† +๐Ÿ™‡ +๐Ÿ™ˆ +๐Ÿงง +๐Ÿ™‰ +๐Ÿ™Š +โœจ +๐Ÿงจ +โŒ +โŽ +๐Ÿงฉ +โ“ +โ” +โ• +โ— +๐Ÿงช +๐Ÿงซ +โž• +โž– +โž— +๐Ÿฆ +๐Ÿฆ‘ +โžฐ +โžฟ +๐Ÿงฐ diff --git a/Project/Tools/stream_language_detector.py b/Project/Tools/stream_language_detector.py new file mode 100755 index 0000000..08d4a2e --- /dev/null +++ b/Project/Tools/stream_language_detector.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +from langdetect import detect +import fileinput as fi +import sys + +# just a little script to detect languages of lines starting +# with the json keyword 'text' and writing the language as json value to stdout. +# other lines are just passing through so that this script can be used in a shell pipeline + +for line in fi.input(): + if line.startswith(' "text"'): + try: + sys.stdout.write(' "lang": "' + detect(line[10:]) + '"\n') + except Exception: + sys.stdout.write(' "lang": "NaN"\n') + sys.stdout.write(line) + + diff --git a/Project/Tools/twitter2messages.sh b/Project/Tools/twitter2messages.sh new file mode 100755 index 0000000..0920e0a --- /dev/null +++ b/Project/Tools/twitter2messages.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash + +SCRIPT=`realpath $0` +SCRIPTPATH=`dirname $SCRIPT` + +# toolset:--------------------------------------------------------------------- + +command 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done) + +function lineprint { + printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' = +} + +function message { + lineprint + printf "$1\n" + lineprint +} + +function error_message { + lineprint + printf "$1\n" >&2 + lineprint +} + +current_action="IDLE" + +function confirm_action { + message "successfully finished action: $current_action" +} + +function set_action { + current_action="$1" + message "$1" +} + +function perform { + "$@" + local status=$? + if [ $status -ne 0 ] + then + error_message "$current_action failed!" + fi + return $status +} + +function perform_and_exit { + perform "$@" || exit 1 +} + +# ----------------------------------------------------------------------------- + +INPUT=$1 +OUTPUT=$2 +if [ $# -ne 2 ] +then + error_message "Error: no input file given. Usage: $0 " + exit 1 +fi + +set_action "processing all files in $INPUT and write to $OUTPUT" + +perform_and_exit export elist=\"`head -c -1 "$SCRIPTPATH/emoji-list.txt" | tr '\n' ',' | sed 's/,/\",\"/g'`\" +perform_and_exit echo "filter by emoji list:" +perform_and_exit echo $elist | tr -d '"' | tr -d ',' + +#perform_and_exit find ./ -type f -name '*.bz2' -exec bzip2 -dc "{}" \; | jq ". | {id: .id, datetime: .created_at, person: .user.name, text: .text} | select(.text != null) | [select(.text | contains($elist))] | select(any)| unique_by(.id) | .[]" | tee /dev/tty > "$OUTPUT" +perform_and_exit find ./ -type f -name '*.bz2' -exec bzip2 -dc "{}" \; | jq ". | {id: .id, datetime: .created_at, person: .user.id, text: .text, lang: .lang, reply_to: .in_reply_to_status_id} | select(.text != null)" | grep --no-group-separator -Ff "$SCRIPTPATH/emoji-list.txt" -A 3 -B 4 | tee /dev/tty > "$OUTPUT" + +# โ†‘ such obvious, much selfexplaining ๐Ÿ’๐Ÿ˜ˆ + +confirm_action diff --git a/Project/Tools/whatsapp2csv.sh b/Project/Tools/whatsapp2csv.sh new file mode 100755 index 0000000..178f170 --- /dev/null +++ b/Project/Tools/whatsapp2csv.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash + +SCRIPT=`realpath $0` +SCRIPTPATH=`dirname $SCRIPT` + +# toolset:--------------------------------------------------------------------- + +command 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done) + +function lineprint { + printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' = +} + +function message { + lineprint + printf "$1\n" + lineprint +} + +function error_message { + lineprint + printf "$1\n" >&2 + lineprint +} + +current_action="IDLE" + +function confirm_action { + message "successfully finished action: $current_action" +} + +function set_action { + current_action="$1" + message "$1" +} + +function perform { + "$@" + local status=$? + if [ $status -ne 0 ] + then + error_message "$current_action failed!" + fi + return $status +} + +function perform_and_exit { + perform "$@" || exit 1 +} + +# ----------------------------------------------------------------------------- +# reading input + +INPUT=$1 +OUTPUT="$INPUT.csv" + +if [ $# -eq 0 ] +then + error_message "Error: no input file given. Usage: $0 " + exit 1 +fi + +set_action "processing File: ${INPUT}" + +if [ ! -e "$INPUT" ] +then + error_message "Error: file '$INPUT' not found" + exit 1 +fi + +perform_and_exit echo -e "date\ttime\tperson\tmessage" > "$OUTPUT" + +# doing the following things in the pipeline below: +# +# 1. merging multiline messages by replacing newlines with spaces if they are not starting with a number followed by '/' (not stating with a date) +# 2. delete all lines containing the keywords: "added, creates, end-to-end, Media ommited" (which are most probably system messages) +# 3. replace separators of whatsapp's txt-format with '\t' as separator for csv +# 4. delete all double-quotes. Because people are too stupid to type them in pairs and that breaks some csv-interpreters ๐Ÿคฆโ€โ™‚ + +perform_and_exit sed ':a;N;/\n[0-9]\{1,\}\+\//!s/\n/ /;ta;P;D' "$INPUT" | grep -v -E 'left|added|created|end-to-end|Media omitted|import java|> "$OUTPUT" + +confirm_action + +message "Wrote output to $OUTPUT" + diff --git a/README.md b/README.md index cd98d00..6fb1680 100644 --- a/README.md +++ b/README.md @@ -39,4 +39,8 @@ Repository for the NLP-LAB * search for predefined Questions in Knowledge Graph +---- +## Links + +https://github.com/AKSW/NSpM