From a46cbea30667330486999a86c6c2c3ad6536003d Mon Sep 17 00:00:00 2001
From: Sergey Sablin
Date: Fri, 7 Feb 2020 22:22:57 +0300
Subject: [PATCH 1/2] Customized date parsing
---
Python-bot/data/base.json | 2 +-
Python-bot/server.py | 29 ++++++++++++++++++-----------
parsing/config.proto | 16 ++++++++++++++++
parsing/first.cxx | 4 ++++
parsing/mydic.gzt | 15 +++++++++++++++
parsing/test.txt | 1 +
setup.py | 3 ++-
7 files changed, 57 insertions(+), 13 deletions(-)
create mode 100644 parsing/config.proto
create mode 100644 parsing/first.cxx
create mode 100644 parsing/mydic.gzt
create mode 100644 parsing/test.txt
diff --git a/Python-bot/data/base.json b/Python-bot/data/base.json
index d3abb84..bdd9d08 100644
--- a/Python-bot/data/base.json
+++ b/Python-bot/data/base.json
@@ -1 +1 @@
-{"205589546": {"2020-01-29|13:39:28.778879": "a", "2020-01-29|13:39:35.527274": "aa", "2020-01-29|13:39:40.711174": "aaa"}}
\ No newline at end of file
+{"205589546": {"2020-01-29|13:39:28.778879": "a", "2020-01-29|13:39:35.527274": "aa", "2020-01-29|13:39:40.711174": "aaa"}, "109297779": {"2020-02-07|21:46:53.837151": "\u041d\u0435 \u043c\u043e\u0433\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443", "2020-02-07|21:47:25.329122": "\u041d\u0435 \u043c\u043e\u0433\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443", "null": "\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u0438\u043d\u043e 08.02.2020"}}
\ No newline at end of file
diff --git a/Python-bot/server.py b/Python-bot/server.py
index ef2d086..9828d0d 100644
--- a/Python-bot/server.py
+++ b/Python-bot/server.py
@@ -1,9 +1,10 @@
import requests
import json
-import random
import datetime
+import re
from user import UserList
+
class Server:
group_id = 191177272
access_token = 'access_token=f068c796542cba0f4dbdd0f6e39ba656a489731d36cfdcbdf7cee30de822ae000aa9e1aa8293bc61d77c7'
@@ -12,16 +13,18 @@ class Server:
data = UserList()
def __init__(self):
- Server.getLongPollServer(self)
+ self.server = str()
+ self.key = str()
+ self.ts = str()
+ self.get_long_poll_server()
- def getLongPollServer(self):
+ def get_long_poll_server(self):
method = 'groups.getLongPollServer?group_id=191177272'
reply = requests.get("&".join([Server.body + method, Server.v, Server.access_token]))
data = json.loads(reply.text)
self.server = data['response']['server']
self.key = data['response']['key']
self.ts = data['response']['ts']
- # print(self.server, self.key, self.ts)
def simple_request(self):
method = self.server + '?act=a_check&key=' + self.key + '&ts=' + self.ts + "&wait=25"
@@ -30,16 +33,20 @@ def simple_request(self):
def simple_loop(self):
reply = json.loads(self.simple_request().text)
self.ts = reply['ts']
- # print(json.dumps(reply, indent='\t'))
if reply['updates']:
message = reply['updates'][0]['object']['message']['text']
+ if 'Напомни' in message:
+ date = re.search('$d{2}-$d{2}-$d{4}', message)
+ if str(date) != '':
+ message = str(message).replace('Напомни ', '').replace(str(date), '')
+ else:
+ message = 'Не могу разобрать команду'
+ date = datetime.datetime.now().isoformat('|')
+ else:
+ message = 'Не могу разобрать команду'
+ date = datetime.datetime.now().isoformat('|')
user_id = reply['updates'][0]['object']['message']['from_id']
- self.data.add_rec(str(user_id), {datetime.datetime.now().isoformat('|'): message})
- random_id = random.randint(0, 100)
- method = 'messages.send?' + 'user_id=' + str(user_id) + '&random_id=' + str(random_id) \
- + '&message=' + message
- r = requests.get("&".join([Server.body + method, Server.v, Server.access_token]))
- print("&".join([Server.body + method, Server.v, Server.access_token]))
+ self.data.add_rec(str(user_id), {date: message})
self.simple_loop()
diff --git a/parsing/config.proto b/parsing/config.proto
new file mode 100644
index 0000000..9bad2d6
--- /dev/null
+++ b/parsing/config.proto
@@ -0,0 +1,16 @@
+encoding "utf8"; // указываем кодировку, в которой написан конфигурационный файл
+
+TTextMinerConfig {
+ Dictionary = "mydic.gzt"; // путь к корневому словарю
+
+ PrettyOutput = "PrettyOutput.html"; // путь к файлу с отладочным выводом в удобном для чтения виде
+
+ Input = {
+ File = "test.txt"; // путь к входному файлу
+ }
+
+ Articles = [
+ { Name = "наша_первая_грамматика" } // название статьи в корневом словаре,
+ // которая содержит запускаемую грамматику
+ ]
+}
diff --git a/parsing/first.cxx b/parsing/first.cxx
new file mode 100644
index 0000000..a7104b1
--- /dev/null
+++ b/parsing/first.cxx
@@ -0,0 +1,4 @@
+#encoding "utf-8" // сообщаем парсеру о том, в какой кодировке написана грамматика
+#GRAMMAR_ROOT S // указываем корневой нетерминал грамматики
+
+Remind -> Noun
diff --git a/parsing/mydic.gzt b/parsing/mydic.gzt
new file mode 100644
index 0000000..db3cc81
--- /dev/null
+++ b/parsing/mydic.gzt
@@ -0,0 +1,15 @@
+encoding "utf8"; // указываем кодировку, в которой написан этот файл
+
+import "base.proto"; // подключаем описания protobuf-типов (TAuxDicArticle и прочих)
+import "articles_base.proto"; // Файлы base.proto и articles_base.proto встроены в компилятор.
+ // Их необходимо включать в начало любого gzt-словаря.
+
+TAuxDicArticle "Базовая грамматика"
+{
+ key = { "tomita:first.cxx" type=CUSTOM }
+}
+
+TAuxDicArticle "Напоминания"
+{
+ key = { "Напомни" | "напомни"}
+}
diff --git a/parsing/test.txt b/parsing/test.txt
new file mode 100644
index 0000000..dce37b9
--- /dev/null
+++ b/parsing/test.txt
@@ -0,0 +1 @@
+Тяжёлый труд облагораживает хорошего человека.
diff --git a/setup.py b/setup.py
index f5c36aa..fd7d0c8 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,8 @@
requirements = [
# TODO: put package requirements here
- 'requests'
+ 'requests',
+ 'datetime'
]
test_requirements = [
From 32427beb88a21c5927d65adc7570ee4db4897185 Mon Sep 17 00:00:00 2001
From: Sergey Sablin
Date: Fri, 7 Feb 2020 23:10:07 +0300
Subject: [PATCH 2/2] Customized parsing with Yandex Tomita parser
---
Python-bot/data/base.json | 2 +-
Python-bot/parsing/PrettyOutput.html | 51 +++++++++++++++++++++++++++
Python-bot/parsing/config.proto | 16 +++++++++
Python-bot/parsing/first.bin | Bin 0 -> 1295 bytes
Python-bot/parsing/first.cxx | 4 +++
Python-bot/parsing/mydic.gzt | 16 +++++++++
Python-bot/parsing/mydic.gzt.bin | Bin 0 -> 11304 bytes
Python-bot/parsing/test.txt | 4 +++
Python-bot/server.py | 7 ++++
9 files changed, 99 insertions(+), 1 deletion(-)
create mode 100644 Python-bot/parsing/PrettyOutput.html
create mode 100644 Python-bot/parsing/config.proto
create mode 100644 Python-bot/parsing/first.bin
create mode 100644 Python-bot/parsing/first.cxx
create mode 100644 Python-bot/parsing/mydic.gzt
create mode 100644 Python-bot/parsing/mydic.gzt.bin
create mode 100644 Python-bot/parsing/test.txt
diff --git a/Python-bot/data/base.json b/Python-bot/data/base.json
index bdd9d08..81dbe8d 100644
--- a/Python-bot/data/base.json
+++ b/Python-bot/data/base.json
@@ -1 +1 @@
-{"205589546": {"2020-01-29|13:39:28.778879": "a", "2020-01-29|13:39:35.527274": "aa", "2020-01-29|13:39:40.711174": "aaa"}, "109297779": {"2020-02-07|21:46:53.837151": "\u041d\u0435 \u043c\u043e\u0433\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443", "2020-02-07|21:47:25.329122": "\u041d\u0435 \u043c\u043e\u0433\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443", "null": "\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u0438\u043d\u043e 08.02.2020"}}
\ No newline at end of file
+{"205589546": {"2020-01-29|13:39:28.778879": "a", "2020-01-29|13:39:35.527274": "aa", "2020-01-29|13:39:40.711174": "aaa"}, "109297779": {"2020-02-07|21:46:53.837151": "\u041d\u0435 \u043c\u043e\u0433\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443", "2020-02-07|21:47:25.329122": "\u041d\u0435 \u043c\u043e\u0433\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443", "null": "\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u0438\u043d\u043e 08.02.2020", "null": "\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u0438\u043d\u043e 08.02.2020"}}
\ No newline at end of file
diff --git a/Python-bot/parsing/PrettyOutput.html b/Python-bot/parsing/PrettyOutput.html
new file mode 100644
index 0000000..5e28eb8
--- /dev/null
+++ b/Python-bot/parsing/PrettyOutput.html
@@ -0,0 +1,51 @@
+
+Напомни
+
+ завтра
+
+ сходить
+
+ в
+
+ качалочку
+
+ напомни
+
+ погулять
+
+ напомни
+
+ напомни
+
+ иии
+
+ EOS
+
+
+| Text |
+Type |
+
+
+| напомни |
+TAuxDicArticle [Базовая грамматика] |
+
+
+| напомни |
+TAuxDicArticle [Базовая грамматика] |
+
+
+| напомни |
+TAuxDicArticle [Базовая грамматика] |
+
+
+| напомни |
+TAuxDicArticle [Базовая грамматика] |
+
+
+
diff --git a/Python-bot/parsing/config.proto b/Python-bot/parsing/config.proto
new file mode 100644
index 0000000..1200fed
--- /dev/null
+++ b/Python-bot/parsing/config.proto
@@ -0,0 +1,16 @@
+encoding "utf8"; // указываем кодировку, в которой написан конфигурационный файл
+
+TTextMinerConfig {
+ Dictionary = "mydic.gzt"; // путь к корневому словарю
+
+ PrettyOutput = "PrettyOutput.html"; // путь к файлу с отладочным выводом в удобном для чтения виде
+
+ Input = {
+ File = "test.txt"; // путь к входному файлу
+ }
+
+ Articles = [
+ { Name = "Базовая грамматика" } // название статьи в корневом словаре,
+ // которая содержит запускаемую грамматику
+ ]
+}
diff --git a/Python-bot/parsing/first.bin b/Python-bot/parsing/first.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0ead54ff9402457caf755d21233c9443255b4f88
GIT binary patch
literal 1295
zcmXX`O>7%Q6#iy+9ZZ{K9lMl5Th{q8X`0ByB+U=1@;rT&Y-`Gf!Qq1)B74_i(Ju}c(5(9;S
z;eOs*%9I9&hDv>X7c#Re>Hg3W*S}O)TR#|%o^B^Nmpq+QPmoISTDlWxcm+~Bjxeu3kAWDQ{!SD=0lHZx^c
ztxjm?=INA9Okd_^^)c9eXwUZm=92K%4E;Q`)Op~|oCqq;J!q%9$k<`q^KL-F{pU0S
zmJ`0u%Wcrkv;jCSl}L)B()bfjHnbQpL0C7lH-A1S*)7ksRVW=xN8L5G`4t_xl|hp
zar_y4GwpH95*C$5RT1~w(9)bh!4!sG5pl2-{8=hYm6sEU#Zn0J&NX2hTko^ju@l%?
z65P`(Gh$O|#@M1LMWb-Xy}-~-agV*6pWX`o#AkjwzigPr3GV$vC)`CO3HBOp%?iun
zm+X@BG4%23#-yRogT>{V6-}HVcS+A}`Due$do~cg70^Pplcs3}@NyT$bxWe$y4{{4rnv(FD2;
zCxzWf9tfH0Rx+GT{7U2MxO
zXK*`6W6XAJVKU@E$LZv>?_4cad3kyxX8{e1YW5@;W;_NtHqE
zZf&>rW9^69_qDy+KF#-Qdk?ptpq-1ta)Zs0X*5uXaj1L9;~H8zB4F=Ay$wa3VVAMQ
z&?Rkm%!&0y#|iFGR%HDt#@v?NQ53jSPoP^4S5JgqsG
z`4M6XjXh8+U`kJYm0auA$`BUA$KcAeoJ_t&O#fPnbv~fK9jA{Nlu@k0I3C|Xzq
zaud+RCVwd$cHakHg^~#?g`V*2Xd@aW#QwU3h=kPP=yAvu;0;9Sa>t-lkd&2Yftvs!
zDb+^;@X`Mh;zpQivYr~jp{PT^nYy|X_LM*+A~)+GPu0gkrZnQ}f6p65qy{x2LgIS(
J-Vv(s`xkJeBZmM0
literal 0
HcmV?d00001
diff --git a/Python-bot/parsing/first.cxx b/Python-bot/parsing/first.cxx
new file mode 100644
index 0000000..28b5637
--- /dev/null
+++ b/Python-bot/parsing/first.cxx
@@ -0,0 +1,4 @@
+#encoding "utf-8" // сообщаем парсеру о том, в какой кодировке написана грамматика
+#GRAMMAR_ROOT Remind // указываем корневой нетерминал грамматики
+
+Remind -> Word;
diff --git a/Python-bot/parsing/mydic.gzt b/Python-bot/parsing/mydic.gzt
new file mode 100644
index 0000000..7a2471b
--- /dev/null
+++ b/Python-bot/parsing/mydic.gzt
@@ -0,0 +1,16 @@
+encoding "utf8"; // указываем кодировку, в которой написан этот файл
+
+import "base.proto"; // подключаем описания protobuf-типов (TAuxDicArticle и прочих)
+import "articles_base.proto"; // Файлы base.proto и articles_base.proto встроены в компилятор.
+ // Их необходимо включать в начало любого gzt-словаря.
+
+TAuxDicArticle "Напоминания"
+{
+ key = { "Напомни" | "напомни"}
+}
+
+TAuxDicArticle "Базовая грамматика"
+{
+ key = { "tomita:first.cxx" type=CUSTOM }
+}
+
diff --git a/Python-bot/parsing/mydic.gzt.bin b/Python-bot/parsing/mydic.gzt.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e0c8601d3209254a2dfe0eaf80e69c7c11cae882
GIT binary patch
literal 11304
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
ba(l-w0e<>>jR-pJ`3Ctw+mp>{TP^+