1
votes

Comment trouver un texte spécifique et imprimer les 2 mots suivants après

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


0 commentaires

3 Réponses :


1
votes

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.


5 commentaires

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é



1
votes

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')]


1 commentaires

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.



1
votes

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]))


3 commentaires

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