|
Traitement personnalisé |
Retour Précédent Suivant |
|
Cette fonctionnalité, d'un niveau avancé, est disponible dans le menu Modifier les paramètres | Avancé.
Le but Je ne peux pas connaître les critères que vous avez définis pour traiter vos textes, à l'exception des critères prédéfinis tels que le choix des textes, du terme de recherche, etc. Vous serez amené à effectuer des vérifications ou modifications spécifiques des données avant qu'elles ne soient converties au format WordSmith. Vous pourriez par exemple avoir besoin de lemmatiser un mot en fonction des exigences spécifiques de votre langue. Cette fonction le permet. Si vous avez choisi de filtrer les concordances, Concord appelle le fichier *.dll chaque fois qu'il trouve un résultat pour votre mot de recherche au cours du traitement de vos fichiers texte. Votre fichier *.dll reçoit des informations sur les éléments trouvés, et le fichier peut ainsi modifier le résultat ou envoyer des informations à Concord pour qu'il l'ignore.
Procédure Sélectionnez votre fichier *.dll (il peut avoir n'importe quel nom) et cochez une ou plusieurs options dans la page Avancé. Pour cela, il faut appeler des fonctions standard et connaître leurs noms et leurs formats. C'est à vous d'écrire votre propre programme *.dll qui effectuera la tâche désirée. Il peut être écrit dans n'importe quel langage (C++, Java, Pascal, etc).
Exemple de lemmatisation d'un mot dans WordList
Le fichier *.dll est fourni lors de l'installation, compilé et prêt à l'utilisation.
Votre fichier *.dll doit contenir une fonction comportant les spécifications suivantes :
function WordlistChangeWord( original : pointer; language_identifier : DWORD; is_Unicode : WordBool) : pointer; stdcall;
L'élément language_identifier est un nombre correspondant à la langue avec laquelle vous travaillez. Reportez-vous aux valeurs LCID (List of Locale ID) affectées par Microsoft .
Ainsi, l'original (envoyé par WordSmith) peut être PCHAR (7 ou 8 bits) ou PWIDECHAR (Unicode 16 bits), et le résultat fourni par votre fichier *.dll peut mener vers :
a) néant (si vous ne souhaitez pas que le terme d'origine apparaisse dans votre liste) b) le même PCHAR/PWIDECHAR s'il ne doit y avoir aucune modification c) une forme de remplacement
Voici un exemple où le texte source était
Today is Easter Day.
Le code source dans Delphi pour ce fichier *.dll est le suivant :
************************************ library WordSmith4CustomDLL;
uses Windows, SysUtils;
{ This example uses a very straightforward Windows routine for comparing strings, CompareStringA and CompareStringW which are in a Windows .dll.
The function does a case-insensitive comparison because NORM_IGNORECASE (=1) is used. If it was replaced by 0, the comparison would be case-sensitive.
In this example, EASTER gets changed to CHRISTMAS. }
function WordlistChangeWord( original : pointer; language_identifier : DWORD; is_Unicode : WordBool) : pointer; stdcall; begin Result := original; if is_Unicode then begin if CompareStringW( language_identifier, NORM_IGNORECASE, PWideChar(original), -1, PWideChar(widestring('EASTER')), -1) - 2 = 0 then Result := pwidechar(widestring('CHRISTMAS')); end else begin if CompareStringA( language_identifier, NORM_IGNORECASE, PChar(original), -1, PChar('EASTER'), -1) - 2 = 0 then Result := pchar('CHRISTMAS'); end; end;
function ConcordChangeWord( original : pointer; language_identifier : DWORD; is_Unicode : WordBool) : pointer; stdcall; begin Result := WordlistChangeWord(original,language_identifier,is_unicode); end;
function KeyWordsChangeWord( original : pointer; language_identifier : DWORD; is_Unicode : WordBool) : pointer; stdcall; begin Result := WordlistChangeWord(original,language_identifier,is_unicode); end;
function HandleConcordanceLine (source_line : pointer; hit_position, hit_length : word; byte_position_in_file, language_id : DWORD; is_Unicode : WordBool; filename : pchar) : pointer; stdcall;
function extrasA : string; begin Result := #9+pchar(filename)+ #9+ IntToStr(byte_position_in_file)+ #9+ IntToStr(hit_position)+ #9+ IntToStr(hit_length); end;
function extrasW : widestring; begin Result := extrasA; end;
var f : TextFile; output_file : string; begin Result := source_line; output_file := ChangeFileExt(ParamStr(0),'')+ '_user_dll_concordance_lines.txt'; if (not IsPathDelimiter(ExpandUNCFileName(ParamStr(0)),1)) and (DiskFree(Ord(UpCase(output_file[1]))-64) > 1024*2000) then try if FileExists(output_file) then begin AssignFile(f,output_file); Append(f); end else begin AssignFile(f,output_file); Rewrite(f); end; if is_Unicode then Writeln(f,pwidechar(source_line)+extrasW) else Writeln(f,pchar(source_line)+extrasA); Flush(f); CloseFile(f); except end; end;
exports
ConcordChangeWord, KeyWordsChangeWord, WordlistChangeWord, HandleConcordanceLine;
begin end.
|