File size: 2,760 Bytes
f36740b
 
 
fa90b1d
 
 
7a05cd7
 
43c88a7
09af6bc
43c88a7
e6758ae
78d0ff1
 
 
 
 
 
 
43c88a7
d03a2fc
cb15d3a
 
 
f36740b
 
 
 
 
 
 
09af6bc
f36740b
7f8aad3
78d0ff1
 
 
 
bddd8be
 
43c88a7
7f8aad3
 
78d0ff1
 
cb15d3a
 
 
43c88a7
78d0ff1
09af6bc
7f8aad3
09af6bc
9cde6b7
 
09af6bc
 
7ade3be
cb15d3a
 
 
 
 
7ade3be
09af6bc
 
f36740b
 
 
 
 
cb15d3a
 
09af6bc
 
78d0ff1
09af6bc
 
 
78d0ff1
09af6bc
 
 
 
7ade3be
 
 
f36740b
 
 
 
 
cb15d3a
 
f36740b
09af6bc
78d0ff1
09af6bc
 
 
 
78d0ff1
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
"""
language detection API
"""

__copyright__ = "Copyright (C) 2020 Nidhal Baccouri"

from typing import List, Optional, Union

import requests
from requests.exceptions import HTTPError

# Module global config
config = {
    "url": "https://ws.detectlanguage.com/0.2/detect",
    "headers": {
        "User-Agent": "Detect Language API Python Client 1.4.0",
        "Authorization": "Bearer {}",
    },
}


def get_request_body(
    text: Union[str, List[str]], api_key: str, *args, **kwargs
):
    """
    send a request and return the response body parsed as dictionary

    @param text: target text that you want to detect its language
    @type text: str
    @type api_key: str
    @param api_key: your private API key

    """
    if not api_key:
        raise Exception(
            "you need to get an API_KEY for this to work. "
            "Get one for free here: https://detectlanguage.com/documentation"
        )
    if not text:
        raise Exception("Please provide an input text")

    else:
        try:
            headers = config["headers"]
            headers["Authorization"] = headers["Authorization"].format(api_key)
            response = requests.post(
                config["url"], json={"q": text}, headers=headers
            )

            body = response.json().get("data")
            return body

        except HTTPError as e:
            print("Error occured while requesting from server: ", e.args)
            raise e


def single_detection(
    text: str,
    api_key: Optional[str] = None,
    detailed: bool = False,
    *args,
    **kwargs
):
    """
    function responsible for detecting the language from a text

    @param text: target text that you want to detect its language
    @type text: str
    @type api_key: str
    @param api_key: your private API key
    @param detailed: set to True if you want to get detailed
    information about the detection process
    """
    body = get_request_body(text, api_key)
    detections = body.get("detections")
    if detailed:
        return detections[0]

    lang = detections[0].get("language", None)
    if lang:
        return lang


def batch_detection(
    text_list: List[str], api_key: str, detailed: bool = False, *args, **kwargs
):
    """
    function responsible for detecting the language from a text

    @param text_list: target batch that you want to detect its language
    @param api_key: your private API key
    @param detailed: set to True if you want to
    get detailed information about the detection process
    """
    body = get_request_body(text_list, api_key)
    detections = body.get("detections")
    res = [obj[0] for obj in detections]
    if detailed:
        return res
    else:
        return [obj["language"] for obj in res]