# coding=utf-8
from nlpir.native.nlpir_base import NLPIRBase, UTF8_CODE, PACKAGE_DIR
from ctypes import c_bool, c_char_p, c_double, c_int, byref, create_string_buffer
import typing
import os
[docs]class SentimentNew(NLPIRBase):
@property
def dll_name(self):
return "SentimentNew"
def __init__(
self,
encode: int = UTF8_CODE,
lib_path: typing.Optional[int] = None,
data_path: typing.Optional[str] = None,
license_code: str = ''
):
sentiment_path = os.path.join(PACKAGE_DIR, "Data/Sentiment")
data_path = sentiment_path if data_path is None else data_path
super().__init__(encode, lib_path, data_path, license_code)
[docs] @NLPIRBase.byte_str_transform
def init_lib(self, data_path: str, encode: int, license_code: str) -> int:
"""
Call **ST_Init**
:param data_path:
:param encode:
:param license_code:
:return:
"""
return self.get_func("ST_Init", [c_char_p, c_int, c_char_p], c_int)(data_path, encode, license_code)
[docs] @NLPIRBase.byte_str_transform
def exit_lib(self) -> bool:
"""
Call **ST_Exit**
:return:
"""
return self.get_func("ST_Exit", None, c_int)()
[docs] @NLPIRBase.byte_str_transform
def get_last_error_msg(self) -> str:
"""
Call **ST_GetLastErrorMsg**
:return:
"""
return self.get_func("ST_GetLastErrorMsg", None, c_char_p)()
[docs] @NLPIRBase.byte_str_transform
def get_one_object_result(self, title: str, content: str, analysis_object: str) -> str:
"""
Call **ST_GetOneObjectResult**
:param title:
:param content:
:param analysis_object:
:return:
"""
return self.get_func("ST_GetOneObjectResult", [c_char_p, c_char_p, c_char_p], c_char_p)(
title,
content,
analysis_object
)
[docs] @NLPIRBase.byte_str_transform
def get_multi_object_result(self, title: str, content: str, object_rule_file: str) -> str:
"""
Call **ST_GetMultiObjectResult**
:param title:
:param content:
:param object_rule_file: see Appendix II: Multiple Object configure sample
:return:
"""
return self.get_func("ST_GetMultiObjectResult", [c_char_p, c_char_p, c_char_p], c_char_p)(
title, content, object_rule_file
)
[docs] @NLPIRBase.byte_str_transform
def get_sentence_point(self, sentence: str) -> str:
"""
Call **ST_GetSentencePoint**
Get multiple object sentimental result
:param sentence:
:return: double,Sentimental point
"""
return self.get_func("ST_GetSentencePoint", [c_char_p], c_char_p)(sentence)
[docs] @NLPIRBase.byte_str_transform
def get_sentiment_point(self, sentence: str) -> float:
"""
Call **ST_GetSentimentPoint**
Get multiple object sentimental result
:param sentence:
:return: double,Sentimental point
"""
return self.get_func("ST_GetSentimentPoint", [c_char_p], c_double)(sentence)
[docs] @NLPIRBase.byte_str_transform
def import_user_dict(self, filename: str, over_write: bool = False) -> int:
"""
Call **ST_ImportUserDict**
Import User-defined dictionary, same as :func:`nlpir.native.ictclas.ICTCLAS.import_user_dict`
:param filename:
:param over_write:
:return:
"""
return self.get_func("ST_ImportUserDict", [c_char_p, c_bool], c_int)(filename, over_write)
[docs] @NLPIRBase.byte_str_transform
def process_dir(self, path: str) -> str:
"""
Call **ST_ProcesDir**
批量处理指定的目录下的文本文件. 分析结果, 输出到指定的Excel文件中
:param path:
:return: path目录下, 自动生成 ``SentimentRankResult.xls``,返回该文件的全路径名称
"""
return self.get_func("ST_ProcesDir", [c_char_p], c_char_p)(path)
[docs]class SentimentAnalysis(NLPIRBase):
EMOTION_HAPPY = 0
EMOTION_GOOD = 1
EMOTION_ANGER = 2
EMOTION_SORROW = 3
EMOTION_FEAR = 4
EMOTION_EVIL = 5
EMOTION_SURPRISE = 6
@property
def dll_name(self):
return "LJSentimentAnalysis"
[docs] @NLPIRBase.byte_str_transform
def init_lib(self, data_path: str, encode: int, license_code: str) -> int:
"""
Call **LJST_Init**
:param data_path:
:param encode:
:param license_code:
:return:
"""
return self.get_func("LJST_Init", [c_char_p, c_int, c_char_p], c_int)(data_path, encode, license_code)
[docs] @NLPIRBase.byte_str_transform
def exit_lib(self) -> bool:
"""
Call **LJST_Exits**
:return:
"""
return self.get_func("LJST_Exits", None, c_bool)()
[docs] @NLPIRBase.byte_str_transform
def get_last_error_msg(self) -> str:
"""
:return:
"""
return self.get_func("LJST_GetLastErrorMsg", None, c_char_p)()
[docs] @NLPIRBase.byte_str_transform
def get_paragraph_sent(self, paragraph: str) -> typing.Tuple[bool, str]:
"""
Call **LJST_GetParagraphSent**
Get sentiment analyze result
:param paragraph:
:return:
"""
result = create_string_buffer(10240)
result_bool = self.get_func("LJST_GetParagraphSent", [c_char_p, c_char_p], c_bool)(paragraph, result)
return result_bool, result.value
[docs] @NLPIRBase.byte_str_transform
def get_file_sent(self, filename: str) -> typing.Tuple[bool, str]:
"""
Call **LJST_GetFileSent**
Get sentiment analyze result
:param filename:
:return:
"""
result = create_string_buffer(10240)
result_bool = self.get_func("LJST_GetFileSent", [c_char_p, c_char_p], c_bool)(filename, byref(result))
return result_bool, result.value
[docs] @NLPIRBase.byte_str_transform
def import_user_dict(self, filename: str, over_write: bool = False):
"""
Call **LJST_ImportUserDict**
Import User-defined dictionary, same as :func:`nlpir.native.ictclas.ICTCLAS.import_user_dict`
:param filename:
:param over_write:
:return:
"""
return self.get_func("LJST_ImportUserDict", [c_char_p, c_bool], c_int)(filename, over_write)