forked from ajing2/coupon-windows
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nlp.py
109 lines (76 loc) · 2.72 KB
/
nlp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json
import random
import requests
import sys
from utils import getProperty
class NLP:
NLP_URL = ''
NLP_DATA_SCHEMA_KEYWORDS = ''
NLP_API_KEYWORDS = ''
NLP_DATA_SCHEME_MORPHOLOGY = ''
NLP_API_MORPHOLOGY = ''
NLP_ORIGIN = ''
NLP_REFERER = ''
NLP_USER_AGENT = ''
@staticmethod
def init(configFile):
NLP.NLP_URL = getProperty(configFile, 'nlp-url')
NLP.NLP_DATA_SCHEMA_KEYWORDS = getProperty(configFile, 'nlp-data-schema-keywords')
NLP.NLP_API_KEYWORDS = getProperty(configFile, 'nlp-api-keywords')
NLP.NLP_DATA_SCHEME_MORPHOLOGY = getProperty(configFile, 'nlp-data-scheme-morphology')
NLP.NLP_API_MORPHOLOGY = getProperty(configFile, 'nlp-api-morphology')
NLP.NLP_ORIGIN = getProperty(configFile, 'nlp-origin')
NLP.NLP_REFERER = getProperty(configFile, 'nlp-referer')
NLP.NLP_USER_AGENT = getProperty(configFile, 'nlp-user-agent')
@staticmethod
def invoke(data):
NLP_HEADERS = {
'Origin': NLP.NLP_ORIGIN,
'Referer': NLP.NLP_REFERER,
'User-Agent': NLP.NLP_USER_AGENT
}
NLP_COOKIES = {
'pgv_pvi': '{}'.format(random.randint(1000000000, 9999999999)),
'pgv_si': 's{}'.format(random.randint(1000000000, 9999999999))
}
r = requests.post(NLP.NLP_URL, data=data, cookies=NLP_COOKIES, headers=NLP_HEADERS)
if 200 != r.status_code:
print 'Error status: (', r.status_code, '):\n', r.text
return None
try:
obj = json.loads(r.content.decode('utf-8', 'ignore'))
except ValueError as e:
print 'Wrong content: "', r.content, '"'
return None
if 'ret_code' not in obj.keys():
print 'No code: (', obj, ')'
return None
errCode = int(obj.pop('ret_code'))
if errCode is not 0:
print 'Error code: (', errCode, ')'
return None
return obj
@staticmethod
def getKeywords(content):
data = {
'api': NLP.NLP_API_KEYWORDS,
'body_data': NLP.NLP_DATA_SCHEMA_KEYWORDS.format(content)
}
obj = NLP.invoke(data)
if obj is None:
print 'No keyword for "', content, '"'
return None
return obj.pop('keywords')
@staticmethod
def getMorphology(content):
data = {
'api': NLP.NLP_API_MORPHOLOGY,
'body_data': NLP.NLP_DATA_SCHEME_MORPHOLOGY.format(content)
}
obj = NLP.invoke(data)
if obj is None:
print 'No morphology for "', content, '"'
return None
return obj.pop('tokens')