Mon code est ci-dessous.
J'ai actuellement une instruction if qui trouve un mot spécifique, dans ce cas 'INGREDIENTS'.
Ensuite,
Au lieu de print ("true")
, j'ai besoin d'imprimer les 2 mots / chaînes suivants de 'INGREDIENTS'. Ce mot / chaîne apparaît une fois dans l'image ('INGREDIENTS').
À titre d'exemple, j'exécute le fichier .py et voici ma sortie si j'inclus ceci dans mon script: print ( text)
from PIL import Image import pytesseract pytesseract.pytesseract.tesseract_cmd = r'C:\Users\gzi\AppData\Roaming\Python\Python37\site-packages\tesseract.exe' img=Image.open('C:/Users/gzi/Desktop/work/lux.jpg') text = pytesseract.image_to_string(img, lang = 'eng') if 'INGREDIENTS' in text: print("True") else: print("False")
J'ai juste besoin de recoder cette section:
INGREDIENTS: Ground Almonds
pour que le résultat soit comme ceci:
if 'INGREDIENTS' in text: print("True") else: print("False")
Parce que les deux mots / chaînes suivants sont Ground
et Almonds
Code Python
Ground Almonds INGREDIENTS: Ground Almonds(100%). 1kg
3 Réponses :
Donc, en supposant que nous ayons extrait le texte suivant, en utilisant pytesseract
:
INGREDIENTS: Ground Almonds
Nous pouvons obtenir le résultat souhaité en:
first_index = text.find('INGREDIENTS') second_index = text.find('(') my_string = f'{text[first_index:second_index]}' print(my_string)
Et la sortie étant:
text = '''Ground Almonds INGREDIENTS: Ground Almonds(100%). 1kg'''
Donc, dans l'extrait de code, nous utilisons la méthode find
pour localiser les INGREDIENTS
mot et le symbole (
(en supposant qu'il viendra toujours après l'ingrédient principal, en spécifiant le pourcentage de celui-ci).
Nous utilisons ensuite string code> trancher avec les index ci-dessus et imprimer le résultat, en le formatant à la sortie souhaitée avec
f-string
.
Classe! Je comprends les deux premières lignes de votre code. Mais pas le 3, si vous avez du temps libre, pouvez-vous l'expliquer?
Cela ne fonctionnera pas s'il n'y a pas de pourcentage attaché à votre ingrédient. Est-il important de ne pas montrer le pourcentage?
Disons que je ne voulais que le premier mot de INGREDIENTS
qui sera Ground
. Quel impact cela aurait-il sur le code actuel?
@ 98Ed, s'il vous plaît voir ma réponse modifiée, j'ai expliqué plus sur le code :)
@JuanC, vous avez raison Juan, c'est pourquoi j'ai supposé qu'il y avait un pourcentage attaché
Rechercher avec regex all match:
import re txt = "INGREDIENTS: Ground Almonds(\"100\");" x = re.findall("INGREDIENTS:\s(\w+)\s(\w+)", txt) print(x) # [('Ground', 'Almonds')]
Salut, j'aime cette idée. J'ai légèrement changé le code en txt = text
. C'est en fait vraiment bon et peut fonctionner à partir de cela.
Si vous ne vous souciez pas du pourcentage et que vous voulez éviter regex
:
INGREDIENTS: Ground Almonds(100%).
Sortie:
string = 'INGREDIENTS: Ground Almonds(100%).' tokens = string.split() for n,i in enumerate(tokens): if 'INGREDIENTS' in i: print(' '.join(tokens[n:n+3]))
C'est exactement ce dont j'avais besoin! J'aime l'idée de [n: n + 3]
Je peux facilement choisir l'index
Je suis content d'avoir aidé!
Beau code! Assurez-vous simplement que si vous voulez le rendre plus générique, il est préférable de localiser également l'index de fin