2017-10-08 8 views
0

J'ai utilisé l'API bing en python pour la correction orthographique. Bien que j'obtienne le bon format JSON avec des suggestions, il ne remplace pas la chaîne d'origine. J'ai essayé avec data.replace, mais ça ne marche pas. Y at-il une autre méthode simple disponible pour remplacer la chaîne d'origine avec des mots suggérés.comment remplacer les mots avec python bing correcteur suggestions

import httplib,urllib,base64 
headers = { 
    # Request headers 
    'Ocp-Apim-Subscription-Key': '7fdf55a1a7e42d0a7890bab142343f8' 
} 

params = urllib.urlencode({ 
    # Request parameters 
    'text': 'Lectures were really good. There were lot of people who came their without any Java knowledge and yet you were very suppor.', 
    'mode': 'proof', 
    'preContextText': '{string}', 
    'postContextText': '{string}', 
    'mkt': '{string}', 
}) 

try: 
    conn = httplib.HTTPSConnection('api.cognitive.microsoft.com') 
    conn.request("GET", "/bing/v5.0/spellcheck/?%s" % params, "{body}", headers) 
    response = conn.getresponse() 
    data = response.read() 
    print(data) 
    conn.close() 
except Exception as e: 
    print("[Errno {0}] {1}".format(e.errno, e.strerror)) 

sortie (assez imprimée):

{'_type': 'SpellCheck', 
'flaggedTokens': [{'offset': 61, 
        'suggestions': [{'score': 0.854956767552189, 
            'suggestion': 'there'}], 
        'token': 'their', 
        'type': 'UnknownToken'}, 
        {'offset': 116, 
        'suggestions': [{'score': 0.871971469417366, 
            'suggestion': 'support'}], 
        'token': 'suppor', 
        'type': 'UnknownToken'}]} 

Répondre

0

Vous devez faire les remplacements vous-même dans votre texte.

Vous pouvez itérer les « flaggedTokens », obtenir le décalage de chaque jeton, trouver la meilleure suggestion et de remplacer le jeton par la suggestion:

import operator 


text = 'Lectures were really good. There were lot of people who came their without any Java knowledge and yet you were very suppor.' 

data = {'_type': 'SpellCheck', 
     'flaggedTokens': [{'offset': 61, 
       'suggestions': [{'score': 0.854956767552189, 
           'suggestion': 'there'}], 
       'token': 'their', 
       'type': 'UnknownToken'}, 
       {'offset': 116, 
       'suggestions': [{'score': 0.871971469417366, 
           'suggestion': 'support'}], 
       'token': 'suppor', 
       'type': 'UnknownToken'}]} 

shifting = 0 
correct = text 
for ft in data['flaggedTokens']: 
    offset = ft['offset'] 
    suggestions = ft['suggestions'] 
    token = ft['token'] 

    # find the best suggestion 
    suggestions.sort(key=operator.itemgetter('score'), reverse=True) 
    substitute = suggestions[0]['suggestion'] 

    # replace the token by the suggestion 
    before = correct[:offset + shifting] 
    after = correct[offset + shifting + len(token):] 
    correct = before + substitute + after 
    shifting += len(substitute) - len(token) 

print(correct) 

Vous obtenez: « Les conférences étaient vraiment bons. Il y avait beaucoup de gens qui sont venus là sans aucune connaissance de Java et pourtant vous étiez très de soutien. "