Pārlūkot izejas kodu

Change is_name function with spacy NER model

Mohidul Islam 5 gadi atpakaļ
vecāks
revīzija
e57da23736

+ 2 - 2
analytics/utils.py

@@ -3,7 +3,7 @@ from review.models import Review
 
 
 def get_review_count_by_month(location_id):
-    day = timezone.now().day
+    day = 31 - timezone.now().day
     sql = f'''
     SELECT review_id, MONTHNAME(create_time) as month, COUNT(review_id) as total_review
     FROM review_review
@@ -42,7 +42,7 @@ def get_review_count_by_month(location_id):
 
 
 def get_review_count_by_week(location_id):
-    day = timezone.now().weekday()
+    day = 6 - timezone.now().weekday()
     sql = f'''
     SELECT review_id, WEEK(create_time) as week, COUNT(review_id) as total_review
     FROM review_review

+ 9 - 7
nlu_job/nlu_utils.py

@@ -5,6 +5,7 @@ from difflib import SequenceMatcher
 from review.models import Review
 
 nlu_server_url = settings.NLU_SERVER_URI
+ner_model = settings.MODEL
 
 
 def filter_with_last_ten_reviews(location_id, replies):
@@ -39,13 +40,8 @@ def is_a_name(name):
     :param : name -> a string usually reviewer name
     :return: Boolean ->  true or false
     '''
-
-    response = model_inference(name.title())
-    entities = response.get('entities')
-    if not entities:
-        return False
-    entity = entities[0]
-    if entity.get('entity') == 'PERSON':
+    doc = ner_model(name)
+    if doc.ents and doc.ents[0].label_ == 'PERSON':
         return True
     else:
         return False
@@ -70,3 +66,9 @@ def analyze_inference(response):
             intents[key] = int(values*100)
 
     return intents
+
+
+def name_entity_recognition(text):
+    doc = ner_model(text)
+    names = [n for n in doc.ents if n.label_ == 'PERSON']
+    return names

+ 1 - 1
review/background_job.py

@@ -19,7 +19,7 @@ def generate_reply(review):
     reply = random.choice(replies)
     name = review.reviewer_name
     if is_a_name(name):
-        parsable_name = ', '+name.split()[0].capitalize()
+        parsable_name = ' '+name.split()[0].capitalize()
     else:
         parsable_name = ''
     replied_text = reply.reply %parsable_name

+ 6 - 0
review_automation/settings.py

@@ -1,4 +1,6 @@
 import os
+import spacy
+import en_core_web_md
 
 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -132,3 +134,7 @@ NLU_SERVER_URI = 'http://localhost:5005'
 CRONJOBS = [
     ('*/10 * * * *', 'review.review_utils.populate_reviews'),
 ]
+
+# spaCy model
+
+MODEL = spacy.load('en_core_web_md')

+ 3 - 0
review_automation/urls.py

@@ -3,7 +3,10 @@ from django.contrib import admin
 from django.urls import path, include
 from django.conf.urls.static import static
 
+from dashboard.views import UnRepliedReviewList
+
 urlpatterns = [
+    path('', UnRepliedReviewList.as_view()),
     path('admin/', admin.site.urls),
     path('', include('gauth.urls')),
     path('nlu/', include('nlu_job.urls')),