DocumentAnalysisClient Classe
DocumentAnalysisClient analyse les informations des documents et des images, et classifie les documents. Il s’agit de l’interface à utiliser pour l’analyse avec des modèles prédéfinis (reçus, cartes de visite, factures, documents d’identité, entre autres), l’analyse de la mise en page des documents, l’analyse des types de documents généraux et l’analyse de documents personnalisés avec des modèles créés (pour voir la liste complète des modèles pris en charge par le service, voir : https://aka.ms/azsdk/formrecognizer/models). Il fournit différentes méthodes basées sur les entrées d’une URL et les entrées d’un flux.
Notes
DocumentAnalysisClient doit être utilisé avec les versions d’API
2022-08-31 et plus. Pour utiliser les versions <d’API =v2.1, instanciez un FormRecognizerClient.
Nouveauté de la version 2022-08-31 : DocumentAnalysisClient et ses méthodes clientes.
- Héritage
-
azure.ai.formrecognizer._form_base_client.FormRecognizerClientBaseDocumentAnalysisClient
Constructeur
DocumentAnalysisClient(endpoint: str, credential: AzureKeyCredential | TokenCredential, **kwargs: Any)
Paramètres
- endpoint
- str
Points de terminaison Cognitive Services pris en charge (protocole et nom d’hôte, par exemple : https://westus2.api.cognitive.microsoft.com).
- credential
- AzureKeyCredential ou TokenCredential
Informations d’identification nécessaires pour que le client se connecte à Azure. Il s’agit d’une instance d’AzureKeyCredential si vous utilisez une clé API ou des informations d’identification de jeton à partir de identity.
- api_version
- str ou DocumentAnalysisApiVersion
Version d’API du service à utiliser pour les requêtes. Il utilise par défaut la dernière version du service. La définition d’une version antérieure peut entraîner une compatibilité des fonctionnalités réduite. Pour utiliser les versions <d’API =v2.1, instanciez un FormRecognizerClient.
Exemples
Création de DocumentAnalysisClient avec un point de terminaison et une clé API.
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
document_analysis_client = DocumentAnalysisClient(endpoint, AzureKeyCredential(key))
Création de DocumentAnalysisClient avec des informations d’identification de jeton.
"""DefaultAzureCredential will use the values from these environment
variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET
"""
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.identity import DefaultAzureCredential
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
credential = DefaultAzureCredential()
document_analysis_client = DocumentAnalysisClient(endpoint, credential)
Méthodes
begin_analyze_document |
Analysez le texte de champ et les valeurs sémantiques d’un document donné. Nouveautés de la version 2023-07-31 : les fonctionnalités mot clé argument. |
begin_analyze_document_from_url |
Analysez le texte de champ et les valeurs sémantiques d’un document donné. L’entrée doit être l’emplacement (URL) du document à analyser. Nouveautés de la version 2023-07-31 : les fonctionnalités mot clé argument. |
begin_classify_document |
Classifier un document à l’aide d’un classifieur de document. Pour plus d’informations sur la création d’un modèle de classifieur personnalisé, consultez https://aka.ms/azsdk/formrecognizer/buildclassifiermodel. Nouveauté de la version 2023-07-31 : la méthode cliente begin_classify_document . |
begin_classify_document_from_url |
Classifiez un document donné avec un classifieur de document. Pour plus d’informations sur la création d’un modèle de classifieur personnalisé, consultez https://aka.ms/azsdk/formrecognizer/buildclassifiermodel. L’entrée doit être l’emplacement (URL) du document à classer. Nouveauté de la version 2023-07-31 : la méthode cliente begin_classify_document_from_url . |
close |
Fermez la DocumentAnalysisClient session. |
send_request |
Exécute une requête réseau à l’aide du pipeline existant du client. L’URL de requête peut être relative à l’URL de base. La version de l’API de service utilisée pour la requête est identique à celle du client, sauf indication contraire. La substitution de la version de l’API configurée du client dans l’URL relative est prise en charge sur le client avec la version d’API 2022-08-31 et ultérieure. Substitution dans l’URL absolue prise en charge sur le client avec n’importe quelle version d’API. Cette méthode ne déclenche pas si la réponse est une erreur ; pour déclencher une exception, appelez raise_for_status() sur l’objet de réponse retourné. Pour plus d’informations sur l’envoi de requêtes personnalisées avec cette méthode, consultez https://aka.ms/azsdk/dpcodegen/python/send_request. |
begin_analyze_document
Analysez le texte de champ et les valeurs sémantiques d’un document donné.
Nouveautés de la version 2023-07-31 : les fonctionnalités mot clé argument.
begin_analyze_document(model_id: str, document: bytes | IO[bytes], **kwargs: Any) -> LROPoller[AnalyzeResult]
Paramètres
- model_id
- str
Un identificateur de modèle unique peut être transmis sous forme de chaîne. Utilisez cette option pour spécifier l’ID de modèle personnalisé ou l’ID de modèle prédéfini. Les ID de modèle prédéfinis pris en charge sont disponibles ici : https://aka.ms/azsdk/formrecognizer/models
Flux de fichiers ou octets. Pour connaître les types de fichiers pris en charge par le service, consultez : https://aka.ms/azsdk/formrecognizer/supportedfiles.
- pages
- str
Numéros de page personnalisés pour les documents multipage (PDF/TIFF). Entrez les numéros de page et/ou les plages de pages que vous souhaitez obtenir dans le résultat. Pour une plage de pages, utilisez un trait d’union, comme pages="1-3, 5-6 ». Séparez chaque numéro de page ou plage par une virgule.
- locale
- str
Indicateur de paramètres régionaux du document d’entrée. Consultez les paramètres régionaux pris en charge ici : https://aka.ms/azsdk/formrecognizer/supportedlocales.
Retours
Instance d’un LROPoller. Appelez result() sur l’objet poller pour renvoyer un AnalyzeResult.
Type de retour
Exceptions
Exemples
Analyser une facture. Pour plus d’exemples, consultez le dossier exemples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
with open(path_to_sample_documents, "rb") as f:
poller = document_analysis_client.begin_analyze_document(
"prebuilt-invoice", document=f, locale="en-US"
)
invoices = poller.result()
for idx, invoice in enumerate(invoices.documents):
print(f"--------Analyzing invoice #{idx + 1}--------")
vendor_name = invoice.fields.get("VendorName")
if vendor_name:
print(
f"Vendor Name: {vendor_name.value} has confidence: {vendor_name.confidence}"
)
vendor_address = invoice.fields.get("VendorAddress")
if vendor_address:
print(
f"Vendor Address: {vendor_address.value} has confidence: {vendor_address.confidence}"
)
vendor_address_recipient = invoice.fields.get("VendorAddressRecipient")
if vendor_address_recipient:
print(
f"Vendor Address Recipient: {vendor_address_recipient.value} has confidence: {vendor_address_recipient.confidence}"
)
customer_name = invoice.fields.get("CustomerName")
if customer_name:
print(
f"Customer Name: {customer_name.value} has confidence: {customer_name.confidence}"
)
customer_id = invoice.fields.get("CustomerId")
if customer_id:
print(
f"Customer Id: {customer_id.value} has confidence: {customer_id.confidence}"
)
customer_address = invoice.fields.get("CustomerAddress")
if customer_address:
print(
f"Customer Address: {customer_address.value} has confidence: {customer_address.confidence}"
)
customer_address_recipient = invoice.fields.get("CustomerAddressRecipient")
if customer_address_recipient:
print(
f"Customer Address Recipient: {customer_address_recipient.value} has confidence: {customer_address_recipient.confidence}"
)
invoice_id = invoice.fields.get("InvoiceId")
if invoice_id:
print(
f"Invoice Id: {invoice_id.value} has confidence: {invoice_id.confidence}"
)
invoice_date = invoice.fields.get("InvoiceDate")
if invoice_date:
print(
f"Invoice Date: {invoice_date.value} has confidence: {invoice_date.confidence}"
)
invoice_total = invoice.fields.get("InvoiceTotal")
if invoice_total:
print(
f"Invoice Total: {invoice_total.value} has confidence: {invoice_total.confidence}"
)
due_date = invoice.fields.get("DueDate")
if due_date:
print(f"Due Date: {due_date.value} has confidence: {due_date.confidence}")
purchase_order = invoice.fields.get("PurchaseOrder")
if purchase_order:
print(
f"Purchase Order: {purchase_order.value} has confidence: {purchase_order.confidence}"
)
billing_address = invoice.fields.get("BillingAddress")
if billing_address:
print(
f"Billing Address: {billing_address.value} has confidence: {billing_address.confidence}"
)
billing_address_recipient = invoice.fields.get("BillingAddressRecipient")
if billing_address_recipient:
print(
f"Billing Address Recipient: {billing_address_recipient.value} has confidence: {billing_address_recipient.confidence}"
)
shipping_address = invoice.fields.get("ShippingAddress")
if shipping_address:
print(
f"Shipping Address: {shipping_address.value} has confidence: {shipping_address.confidence}"
)
shipping_address_recipient = invoice.fields.get("ShippingAddressRecipient")
if shipping_address_recipient:
print(
f"Shipping Address Recipient: {shipping_address_recipient.value} has confidence: {shipping_address_recipient.confidence}"
)
print("Invoice items:")
for idx, item in enumerate(invoice.fields.get("Items").value):
print(f"...Item #{idx + 1}")
item_description = item.value.get("Description")
if item_description:
print(
f"......Description: {item_description.value} has confidence: {item_description.confidence}"
)
item_quantity = item.value.get("Quantity")
if item_quantity:
print(
f"......Quantity: {item_quantity.value} has confidence: {item_quantity.confidence}"
)
unit = item.value.get("Unit")
if unit:
print(f"......Unit: {unit.value} has confidence: {unit.confidence}")
unit_price = item.value.get("UnitPrice")
if unit_price:
unit_price_code = unit_price.value.code if unit_price.value.code else ""
print(
f"......Unit Price: {unit_price.value}{unit_price_code} has confidence: {unit_price.confidence}"
)
product_code = item.value.get("ProductCode")
if product_code:
print(
f"......Product Code: {product_code.value} has confidence: {product_code.confidence}"
)
item_date = item.value.get("Date")
if item_date:
print(
f"......Date: {item_date.value} has confidence: {item_date.confidence}"
)
tax = item.value.get("Tax")
if tax:
print(f"......Tax: {tax.value} has confidence: {tax.confidence}")
amount = item.value.get("Amount")
if amount:
print(
f"......Amount: {amount.value} has confidence: {amount.confidence}"
)
subtotal = invoice.fields.get("SubTotal")
if subtotal:
print(f"Subtotal: {subtotal.value} has confidence: {subtotal.confidence}")
total_tax = invoice.fields.get("TotalTax")
if total_tax:
print(
f"Total Tax: {total_tax.value} has confidence: {total_tax.confidence}"
)
previous_unpaid_balance = invoice.fields.get("PreviousUnpaidBalance")
if previous_unpaid_balance:
print(
f"Previous Unpaid Balance: {previous_unpaid_balance.value} has confidence: {previous_unpaid_balance.confidence}"
)
amount_due = invoice.fields.get("AmountDue")
if amount_due:
print(
f"Amount Due: {amount_due.value} has confidence: {amount_due.confidence}"
)
service_start_date = invoice.fields.get("ServiceStartDate")
if service_start_date:
print(
f"Service Start Date: {service_start_date.value} has confidence: {service_start_date.confidence}"
)
service_end_date = invoice.fields.get("ServiceEndDate")
if service_end_date:
print(
f"Service End Date: {service_end_date.value} has confidence: {service_end_date.confidence}"
)
service_address = invoice.fields.get("ServiceAddress")
if service_address:
print(
f"Service Address: {service_address.value} has confidence: {service_address.confidence}"
)
service_address_recipient = invoice.fields.get("ServiceAddressRecipient")
if service_address_recipient:
print(
f"Service Address Recipient: {service_address_recipient.value} has confidence: {service_address_recipient.confidence}"
)
remittance_address = invoice.fields.get("RemittanceAddress")
if remittance_address:
print(
f"Remittance Address: {remittance_address.value} has confidence: {remittance_address.confidence}"
)
remittance_address_recipient = invoice.fields.get("RemittanceAddressRecipient")
if remittance_address_recipient:
print(
f"Remittance Address Recipient: {remittance_address_recipient.value} has confidence: {remittance_address_recipient.confidence}"
)
Analysez un document personnalisé. Pour plus d’exemples, consultez le dossier exemples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
model_id = os.getenv("CUSTOM_BUILT_MODEL_ID", custom_model_id)
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
# Make sure your document's type is included in the list of document types the custom model can analyze
with open(path_to_sample_documents, "rb") as f:
poller = document_analysis_client.begin_analyze_document(
model_id=model_id, document=f
)
result = poller.result()
for idx, document in enumerate(result.documents):
print(f"--------Analyzing document #{idx + 1}--------")
print(f"Document has type {document.doc_type}")
print(f"Document has document type confidence {document.confidence}")
print(f"Document was analyzed with model with ID {result.model_id}")
for name, field in document.fields.items():
field_value = field.value if field.value else field.content
print(
f"......found field of type '{field.value_type}' with value '{field_value}' and with confidence {field.confidence}"
)
# iterate over tables, lines, and selection marks on each page
for page in result.pages:
print(f"\nLines found on page {page.page_number}")
for line in page.lines:
print(f"...Line '{line.content}'")
for word in page.words:
print(f"...Word '{word.content}' has a confidence of {word.confidence}")
if page.selection_marks:
print(f"\nSelection marks found on page {page.page_number}")
for selection_mark in page.selection_marks:
print(
f"...Selection mark is '{selection_mark.state}' and has a confidence of {selection_mark.confidence}"
)
for i, table in enumerate(result.tables):
print(f"\nTable {i + 1} can be found on page:")
for region in table.bounding_regions:
print(f"...{region.page_number}")
for cell in table.cells:
print(
f"...Cell[{cell.row_index}][{cell.column_index}] has text '{cell.content}'"
)
print("-----------------------------------")
begin_analyze_document_from_url
Analysez le texte de champ et les valeurs sémantiques d’un document donné. L’entrée doit être l’emplacement (URL) du document à analyser.
Nouveautés de la version 2023-07-31 : les fonctionnalités mot clé argument.
begin_analyze_document_from_url(model_id: str, document_url: str, **kwargs: Any) -> LROPoller[AnalyzeResult]
Paramètres
- model_id
- str
Un identificateur de modèle unique peut être transmis sous forme de chaîne. Utilisez cette option pour spécifier l’ID de modèle personnalisé ou l’ID de modèle prédéfini. Les ID de modèle prédéfinis pris en charge sont disponibles ici : https://aka.ms/azsdk/formrecognizer/models
- document_url
- str
URL du document à analyser. L’entrée doit être valide, correctement encodée (c’est-à-dire encoder des caractères spéciaux, tels que des espaces vides) et une URL accessible publiquement. Pour connaître les types de fichiers pris en charge par le service, consultez : https://aka.ms/azsdk/formrecognizer/supportedfiles.
- pages
- str
Numéros de page personnalisés pour les documents multipage (PDF/TIFF). Entrez les numéros de page et/ou les plages de pages que vous souhaitez obtenir dans le résultat. Pour une plage de pages, utilisez un trait d’union, comme pages="1-3, 5-6 ». Séparez chaque numéro de page ou plage par une virgule.
- locale
- str
Indicateur de paramètres régionaux du document d’entrée. Consultez les paramètres régionaux pris en charge ici : https://aka.ms/azsdk/formrecognizer/supportedlocales.
Retours
Instance d’un LROPoller. Appelez result() sur l’objet poller pour renvoyer un AnalyzeResult.
Type de retour
Exceptions
Exemples
Analyser un reçu. Pour plus d’exemples, consultez le dossier exemples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
url = "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/formrecognizer/azure-ai-formrecognizer/tests/sample_forms/receipt/contoso-receipt.png"
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-receipt", document_url=url
)
receipts = poller.result()
for idx, receipt in enumerate(receipts.documents):
print(f"--------Analysis of receipt #{idx + 1}--------")
print(f"Receipt type: {receipt.doc_type if receipt.doc_type else 'N/A'}")
merchant_name = receipt.fields.get("MerchantName")
if merchant_name:
print(
f"Merchant Name: {merchant_name.value} has confidence: "
f"{merchant_name.confidence}"
)
transaction_date = receipt.fields.get("TransactionDate")
if transaction_date:
print(
f"Transaction Date: {transaction_date.value} has confidence: "
f"{transaction_date.confidence}"
)
if receipt.fields.get("Items"):
print("Receipt items:")
for idx, item in enumerate(receipt.fields.get("Items").value):
print(f"...Item #{idx + 1}")
item_description = item.value.get("Description")
if item_description:
print(
f"......Item Description: {item_description.value} has confidence: "
f"{item_description.confidence}"
)
item_quantity = item.value.get("Quantity")
if item_quantity:
print(
f"......Item Quantity: {item_quantity.value} has confidence: "
f"{item_quantity.confidence}"
)
item_price = item.value.get("Price")
if item_price:
print(
f"......Individual Item Price: {item_price.value} has confidence: "
f"{item_price.confidence}"
)
item_total_price = item.value.get("TotalPrice")
if item_total_price:
print(
f"......Total Item Price: {item_total_price.value} has confidence: "
f"{item_total_price.confidence}"
)
subtotal = receipt.fields.get("Subtotal")
if subtotal:
print(f"Subtotal: {subtotal.value} has confidence: {subtotal.confidence}")
tax = receipt.fields.get("TotalTax")
if tax:
print(f"Total tax: {tax.value} has confidence: {tax.confidence}")
tip = receipt.fields.get("Tip")
if tip:
print(f"Tip: {tip.value} has confidence: {tip.confidence}")
total = receipt.fields.get("Total")
if total:
print(f"Total: {total.value} has confidence: {total.confidence}")
print("--------------------------------------")
begin_classify_document
Classifier un document à l’aide d’un classifieur de document. Pour plus d’informations sur la création d’un modèle de classifieur personnalisé, consultez https://aka.ms/azsdk/formrecognizer/buildclassifiermodel.
Nouveauté de la version 2023-07-31 : la méthode cliente begin_classify_document .
begin_classify_document(classifier_id: str, document: bytes | IO[bytes], **kwargs: Any) -> LROPoller[AnalyzeResult]
Paramètres
- classifier_id
- str
Un identificateur de classifieur de document unique peut être transmis sous forme de chaîne.
Flux de fichiers ou octets. Pour connaître les types de fichiers pris en charge par le service, consultez : https://aka.ms/azsdk/formrecognizer/supportedfiles.
Retours
Instance d’un LROPoller. Appelez result() sur l’objet poller pour renvoyer un AnalyzeResult.
Type de retour
Exceptions
Exemples
Classifier un document. Pour plus d’exemples, consultez le dossier exemples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
classifier_id = os.getenv("CLASSIFIER_ID", classifier_id)
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
with open(path_to_sample_documents, "rb") as f:
poller = document_analysis_client.begin_classify_document(
classifier_id, document=f
)
result = poller.result()
print("----Classified documents----")
for doc in result.documents:
print(
f"Found document of type '{doc.doc_type or 'N/A'}' with a confidence of {doc.confidence} contained on "
f"the following pages: {[region.page_number for region in doc.bounding_regions]}"
)
begin_classify_document_from_url
Classifiez un document donné avec un classifieur de document. Pour plus d’informations sur la création d’un modèle de classifieur personnalisé, consultez https://aka.ms/azsdk/formrecognizer/buildclassifiermodel. L’entrée doit être l’emplacement (URL) du document à classer.
Nouveauté de la version 2023-07-31 : la méthode cliente begin_classify_document_from_url .
begin_classify_document_from_url(classifier_id: str, document_url: str, **kwargs: Any) -> LROPoller[AnalyzeResult]
Paramètres
- classifier_id
- str
Un identificateur de classifieur de document unique peut être transmis sous forme de chaîne.
- document_url
- str
URL du document à classer. L’entrée doit être valide, correctement encodée (c’est-à-dire encoder des caractères spéciaux, tels que des espaces vides) et une URL accessible publiquement de l’un des formats pris en charge : https://aka.ms/azsdk/formrecognizer/supportedfiles.
Retours
Instance d’un LROPoller. Appelez result() sur l’objet poller pour renvoyer un AnalyzeResult.
Type de retour
Exceptions
Exemples
Classifier un document. Pour plus d’exemples, consultez le dossier exemples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
classifier_id = os.getenv("CLASSIFIER_ID", classifier_id)
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
url = "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/formrecognizer/azure-ai-formrecognizer/tests/sample_forms/forms/IRS-1040.pdf"
poller = document_analysis_client.begin_classify_document_from_url(
classifier_id, document_url=url
)
result = poller.result()
print("----Classified documents----")
for doc in result.documents:
print(
f"Found document of type '{doc.doc_type or 'N/A'}' with a confidence of {doc.confidence} contained on "
f"the following pages: {[region.page_number for region in doc.bounding_regions]}"
)
close
send_request
Exécute une requête réseau à l’aide du pipeline existant du client.
L’URL de requête peut être relative à l’URL de base. La version de l’API de service utilisée pour la requête est identique à celle du client, sauf indication contraire. La substitution de la version de l’API configurée du client dans l’URL relative est prise en charge sur le client avec la version d’API 2022-08-31 et ultérieure. Substitution dans l’URL absolue prise en charge sur le client avec n’importe quelle version d’API. Cette méthode ne déclenche pas si la réponse est une erreur ; pour déclencher une exception, appelez raise_for_status() sur l’objet de réponse retourné. Pour plus d’informations sur l’envoi de requêtes personnalisées avec cette méthode, consultez https://aka.ms/azsdk/dpcodegen/python/send_request.
send_request(request: HttpRequest, *, stream: bool = False, **kwargs) -> HttpResponse
Paramètres
- stream
- bool
Indique si la charge utile de réponse sera diffusée en continu. Valeur par défaut False.
Retours
Réponse de votre appel réseau. Ne gère pas les erreurs sur votre réponse.
Type de retour
Exceptions
Azure SDK for Python
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour