2017-07-17 2 views
0

Es scheint, dass NLU den vollständigen Datenblock, den ich ihm zur Verfügung stelle, nicht erkennt. Mache ich etwas falsch in meinem Code oder habe falsche Annahmen darüber, wie die API funktionieren sollte? Die Antwort von der API ist enthalten und enthält den Code, der analysiert wurde, sowie den gesamten übermittelten Text. Es gibt ein Delta und ich bin mir nicht sicher, warum das so ist.Warum nimmt NLU nicht den gesamten Text von Daten ab?

Hier ist mein Code:

def nlu(text): 
print("Calling NLU") 
url = "https://gateway.watsonplatform.net/natural-language-understanding/api/v1/analyze?version=2017-02-27" 
data = { 
    'text': text, 
    'language': "en", 
    'return_analyzed_text': True, 
    'clean': True, 
    'features': { 
     'entities': { 
      'emotion': True, 
      'sentiment': True, 
      'limit': 2 
     }, 
     "concepts": { 
      "limit": 15 
     }, 
     'keywords': { 
      'emotion': True, 
      'sentiment': True, 
      'limit': 2 
     } 
    } 
} 
headers = { 
    'content-type': "application/json" 
} 
username = os.getenv("nlu-username") 
password = os.getenv("nlu-password") 
print("NLU", username, password) 
print("data", json.dumps(data)) 
response = requests.request("POST", url, data=json.dumps(data), headers=headers, auth=(username, password)) 
print("Done calling NLU") 
print(response.text) 

Hier ist die Anforderung/Antwort:

"keywords": [ 
{ 
    "text": "anthropologists study skeletons", 
    "sentiment": { 
    "score": 0.0 
    },"analyzed_text": "move between two thousand eight and two thousand twelve archaeologists excavated the rubble of an ancient hospital in England in the process they uncovered a number of skeletons one in particular belong to a wealthy Mel who lived in the eleventh or twelfth century and died of leprosy between the ages of eighteen and twenty five how do we know all this simply by examining some old soil Kate bones even centuries after death skeletons carry unique features that tell us about their identities and using modern tools and techniques we can read those features as clues this is a branch of science known as biological anthropology it allows researchers to piece together details about Incheon individuals and identify historical events that affected whole populations when researchers uncover a skeleton some of the first clues they gather like age and gender line its morphology which is the structure appearance and size of a skeleton mostly the clavicle stop growing at age twenty five so a skeleton with the clavicle that hasn't fully formed must be younger than similarly the plates in the cranium can continue fusing up to age forty and sometimes beyond by combining these with some microscopic skeletal clues physical anthropologists can estimate an approximate age of death meanwhile pelvic bones reveal gender biologically female palaces are wider allowing women to give birth whereas males are narrower those also betrayed the signs of aging disease disorders like anemia leave their traces on the bones and the condition of teeth can reveal clues to factors like diet and malnutrition which sometimes correlate with wealth or poverty a protein called collagen can give us even more profound details the air we breathe water we drink and food we eat leaves permanent traces in our bones and teeth in the form of chemical compounds these compounds contain measurable quantities called isotopes stable isotopes in bone collagen and tooth enamel varies among mammals dependent on where they lived and what they eat so but analyzing these isotopes we can draw direct inferences regarding the diet and location of historic people not only that but during life bones undergo a constant cycle of remodeling so if someone moves from one place to another bones synthesized after that move will also reflect the new isotopic signatures of the surrounding environment that means that skeletons can be used like migratory maps for instance between one and six fifty A. D. the great city of TOT Makana Mexico bustled with thousands of people researchers examined the isotope ratios and skeletons to the now which held details of their diets when they were young they found evidence for significant migration into the city a majority of the individuals were born elsewhere with further geological and skeletal analysis they may be able to map where those people came from that work in tier two Akon is also an example of how bio anthropologists study skeletons in cemeteries and mass graves and analyze their similarities and differences from not information they can learn about cultural beliefs social norms wars and what caused their deaths today we use these tools to answer big questions about how forces like migration and disease shape the modern world DNA analysis is even possible in some relatively well preserved ancient remains that's helping us understand how diseases like tuberculosis have evolved over the centuries so we can build better treatments for people today ocean skeletons can tell us a surprisingly great deal about the past two of your remains are someday buried intact what might archaeologists of the distant future learn from them" 

Antwort

0

ich auf NLU gerade versucht, mit Ihrem Text und eine richtige Antwort zu erhalten. Überprüfen Sie das folgende Ergebnis. Ich denke, Sie sollten zuerst die Watson API Explorer mit Ihren Service-Anmeldedaten versuchen. Es hilft Ihnen auch, falsch platzierte Header oder verpasste Parameter in den API-Aufruf zu korrigieren.

Hinweis: Entfernen Sie einfach die „Metadaten“: {} im Parameterobjekt vor dem POST-Anruf tätigt, wie es für URL und HTML ist.

{ 
"semantic_roles": [{ 
    "subject": { 
     "text": "anthropologists" 
    }, 
    "sentence": "anthropologists study skeletons", 
    "object": { 
     "text": "skeletons" 
    }, 
    "action": { 
     "verb": { 
      "text": "study", 
      "tense": "present" 
     }, 
     "text": "study", 
     "normalized": "study" 
    } 
}], 
"language": "en", 
"keywords": [{ 
     "text": "anthropologists", 
     "relevance": 0.966464 
    }, 
    { 
     "text": "skeletons", 
     "relevance": 0.896147 
    } 
], 
"entities": [], 
"concepts": [{ 
    "text": "Cultural studies", 
    "relevance": 0.86926, 
    "dbpedia_resource": "http://dbpedia.org/resource/Cultural_studies" 
}], 
"categories": [{ 
     "score": 0.927751, 
     "label": "/science/social science/anthropology" 
    }, 
    { 
     "score": 0.219365, 
     "label": "/education/homework and study tips" 
    }, 
    { 
     "score": 0.128377, 
     "label": "/science" 
    } 
], 
"warnings": [ 
    "emotion: cannot locate keyphrase", 
    "relations: Not Found", 
    "sentiment: cannot locate keyphrase" 
] 

}

+0

Die Website, die Sie aufgelistet haben, ist sehr nützlich. Ist es mit den offiziellen Dokumenten verknüpft? [Watson api post comman] (https://www.ibm.com/watson/developercloud/natural-language-understanding/api/v1/?curl#post-analyze) Wie hast du das gefunden? Ich denke, es wurde eine Lösung gefunden, weil es am Tag nach der Veröffentlichung von SO in Betrieb ging. –

+0

Die meisten API-Aufrufe sind mit den offiziellen Dokumenten verknüpft. Einige Dienste sind veraltet, aber ihre API-Aufrufe sind in dieser App wie Alchemy weiterhin verfügbar. Und für NLU habe ich die API-Aufrufe von dieser Anwendung etwa eine Woche zurück überprüft, bevor ich Ihre Abfrage sah. Für mich war es da. –

+0

Sehr cool. Ich habe nicht einmal gesehen, dass es existiert, bis du es gesendet hast - danke fürs Teilen. –

0

In Ihrem Code haben Sie

data=json.dumps(data)

, die das gesamte JSON-Objekt in eine Zeichenfolge konvertiert. Das sollte gerade sein:

data=data

Auch würde ich empfehlen, die Python WDC SDK zu verwenden, da es einfacher für Sie machen.

Das gleiche Beispiel wie oben.

import json 
from watson_developer_cloud import NaturalLanguageUnderstandingV1 
import watson_developer_cloud.natural_language_understanding.features.v1 as Features 

username = os.getenv("nlu-username") 
password = os.getenv("nlu-password") 

nluv1 = NaturalLanguageUnderstandingV1(
    username=username, 
    password=password) 

features = [ 
    Features.Entities(), 
    Features.Concepts(), 
    Features.Keywords() 
] 

def nlu(text): 
    print('Calling NLU') 
    response = nluv1.analyze(text,features=features, language='en') 
    print('Done calling NLU') 
    print(json.dumps(response, indent=2)) 
+0

Toller Vorschlag und ich würde aber gerne das SDK installieren Pakete aus einer Vielzahl von Gründen fehlschlägt. [Stack Overflow Problem] (https://stackoverflow.com/questions/45154082/why-does-pip-install-fail-for-the-python-watson-developer-cloud/45159403#45159403) Warum nicht einfach posten die erforderliche Anfrage/Antwort als Beispiel in den api docs? –

+0

Das Problem ist nicht mit WDC SDK. Es ist ein bekanntes Installationsproblem mit sechs und OSX/Python 2.7. Anyway Beispielcode oben ist Python 3.6, die SDK fein installiert. –

+0

Danke für den Vorschlag Simon. Gibt es eine Möglichkeit, diese Abhängigkeiten aus dem SDK umzuformen oder die Clients in separate Abhängigkeiten aufzuteilen, die einzeln importiert und installiert werden können? –

Verwandte Themen