Condividi:        

Trova testo - Word

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Trova testo - Word

Postdi AleRosa » 08/07/17 14:43

Salve,
sono alla ricerca (tra l'altro non so nemmeno se esista un programmino apposito oppure se sia sufficiente un VBA) di un modo per fare un confronto testo tra due documenti. Non ho bisogno (almeno penso) della funzione Compare di Word perché il mio obiettivo è trovare le stesse identiche frasi (non parole) all'interno di testi che sono sostanzilamente molto differenti.
Non posso caricare file di esempio per questioni di riservatezza. Vi faccio un esempio qui:
Documento MASTER (quello da usare come base).
Giorgio mangia la mela rossa. La mamma di Giorgio ha comprato la mela rossa dal fruttivendolo di paese il quale voleva anche darle un chilo di mele. Siccome Giorgio non mangia le mele allora sua madre ha preferito non acquistarle. Tuttavia, la mamma di Giorgio, dal momento che era il suo compleanno, ha voluto comprare un chilo di fragole. Al ritorno, la mamma ha poggiato le fragole sul tavolo e dopo poche ore si è resa conto che queste erano sparite.

Documento APPENDICE (quello in cui controllare la presenza di frasi identiche a quelle contenute nel documento MASTER).
Oggi non sono andata a scuola. Stamattina ho detto alla mamma di andare a comprarmi della frutta rossa. Al ritorno dal lavoro, la mamma ha poggiato le fragole sul tavolo e dopo poche ore si è resa conto che queste erano sparite. Le ho mangiate tutte io.

Ecco, come faccio a controllare se e quali frasi identiche al documento Master contiene il documento appendice?
Non posso copiarle una a una in cerca/trova perché il documento master è lunghissimo e mi ci vorrebbe un'eternità.
Grazie!
AleRosa
Utente Junior
 
Post: 46
Iscritto il: 09/11/16 09:40

Sponsor
 

Re: Trova testo - Word

Postdi Anthony47 » 09/07/17 01:29

Il concetto di "frase" e' troppo vaga da poterla usare in una macro.
Se sei devi verificare che un certo documento non contenga fasi copiate da altri documenti pubblici allora cerca su google con la stringa "verifica plagio" (senza virgolette) e troverai numerosi riferimenti (ma forse "pochi" gratuiti).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19183
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Trova testo - Word

Postdi patel » 09/07/17 10:59

a parte il concetto di "frase" che implica il senso compiuto, si potrebbe fare una macro che prende due parole consecutive dal docum appendice e le cerca in master, se non le trova prende le 2 parole successive, se le trova prende la terza parola e poi la quarta ... fino a che la ricerca da esito positivo. Non so se mi sono spiegato, ma la mia conoscenza di word è troppo scarsa per provare a scrivere un codice del genere.
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: Trova testo - Word

Postdi FRIEDRICH » 10/07/17 19:49

Ciao a tutto il Forum,
due possibili soluzioni con macro di Word pescate in rete.

Crea un nuovo documento Word e copia prima il testo del documento Master e a seguire il documento Appendice. Se i documenti sono molto lunghi le macro possono impiegare molto tempo, fai eventualmente un test su alcuni capitoli per volta.

La prima macro evidenzia in rosa le frasi identiche, l'unica avvertenza è che considera fine della frase ogni punto nel testo (ad esempio John F. Kennedy, S. Pietro, ecc.).

Se si volesse che invece di evidenziare le parole le stesse vengano scritte in rosso sostituire

v.HighlightColorIndex = wdPink '<=== evidenzia parole
con
v.Font.Color = wdColorRed '<=== testo in rosso

Codice:

Codice: Seleziona tutto
Option Explicit

Sub CercaFrasiDuplicate()
    Dim MyArray() As String
    Dim n As Long, i As Long
    Dim Col As New Collection
    Dim itm

    n = 0
   
    For i = 1 To ActiveDocument.Sentences.Count
        n = n + 1
        ReDim Preserve MyArray(n)
        MyArray(n) = Trim(ActiveDocument.Sentences(i).Text)
    Next

   
    SortArray MyArray, 0, UBound(MyArray)

   
    For i = 1 To UBound(MyArray)
        If i = UBound(MyArray) Then Exit For
        If InStr(1, MyArray(i + 1), MyArray(i), vbTextCompare) Then
            On Error Resume Next
            Col.Add MyArray(i), """" & MyArray(i) & """"
            On Error GoTo 0
        End If
    Next i

 
    For Each itm In Col
        Selection.Find.ClearFormatting
        Selection.HomeKey wdStory, wdMove
        Selection.Find.Execute itm
        Do Until Selection.Find.Found = False
            Selection.Range.HighlightColorIndex = wdPink
            Selection.Find.Execute
        Loop
    Next
End Sub


Public Sub SortArray(vArray As Variant, i As Long, j As Long)
  Dim tmp As Variant, tmpSwap As Variant
  Dim ii As Long, jj As Long

  ii = i: jj = j: tmp = vArray((i + j) \ 2)

  While (ii <= jj)
     While (vArray(ii) < tmp And ii < j)
        ii = ii + 1
     Wend
     While (tmp < vArray(jj) And jj > i)
        jj = jj - 1
     Wend
     If (ii <= jj) Then
        tmpSwap = vArray(ii)
        vArray(ii) = vArray(jj): vArray(jj) = tmpSwap
        ii = ii + 1: jj = jj - 1
     End If
  Wend
  If (i < jj) Then SortArray vArray, i, jj
  If (ii < j) Then SortArray vArray, ii, j
End Sub


La seconda macro evidenzia le sequenze di parole ripetute (per variare il numero di parole è sufficiente cambiare n = 10 con il numero desiderato).

Per l'esecuzione della macro bisogna prima attivare nel menu di VBA -> Strumenti -> Riferimenti la voce Microsoft Scripting Runtime.

Di seguito il codice:

Codice: Seleziona tutto
Sub CercaTestoRipetuto()
Application.ScreenUpdating = False

Dim ABC As Scripting.Dictionary
Dim v As Range
Dim n As Integer
    n = 10 '<=== numero di parole consecutive
    Set ABC = FindRepeatingWordChains(n, ActiveDocument)
   
    If Not ABC Is Nothing Then
        For Each v In ABC
       
           v.HighlightColorIndex = wdPink '<=== evidenzia parole Oppure v.Font.Color = wdColorRed 'testo in rosso
        Next v
    End If
End Sub


Function FindRepeatingWordChains(ChainLenth As Integer, DocToCheck As Document) As Scripting.Dictionary
Dim DictWords As New Scripting.Dictionary, DictMatches As New Scripting.Dictionary
Dim sChain As String
Dim CurWord As Range
Dim MatchCount As Integer
Dim i As Integer

    MatchCount = 0

    For Each CurWord In DocToCheck.Words
       
        If Not CurWord.Next(wdWord, ChainLenth - 1) Is Nothing Then
           
            If CurWord <> vbCr And CurWord <> vbNewLine And CurWord <> vbCrLf And CurWord <> vbLf And CurWord <> vbTab And _
                CurWord.Next(wdWord, ChainLenth - 1) <> vbCr And CurWord.Next(wdWord, ChainLenth - 1) <> vbNewLine And _
                CurWord.Next(wdWord, ChainLenth - 1) <> vbCrLf And CurWord.Next(wdWord, ChainLenth - 1) <> vbLf And _
                CurWord.Next(wdWord, ChainLenth - 1) <> vbTab Then
                sChain = CurWord
                For i = 1 To ChainLenth - 1
                   
                    sChain = sChain & " " & CurWord.Next(wdWord, i)
                Next i

               
                If DictWords.Exists(sChain) Then
                    MatchCount = MatchCount + 1
                    DictMatches.Add DocToCheck.Range(CurWord.Start, CurWord.Next(wdWord, ChainLenth - 1).End), MatchCount
                Else
                    DictWords.Add sChain, sChain
                End If
            End If
        End If
    Next CurWord

 
    If DictMatches.Count > 0 Then
        Set FindRepeatingWordChains = DictMatches
    Else
        Set FindRepeatingWordChains = Nothing
    End If
  Application.ScreenUpdating = True

End Function
Avatar utente
FRIEDRICH
Utente Junior
 
Post: 32
Iscritto il: 09/07/17 17:14

Re: Trova testo - Word

Postdi patel » 11/07/17 09:35

ovviamente le frasi devono essere proprio uguali anche negli spazi e punteggiatura, la seconda macro perdona un po' di più piccole differenze
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: Trova testo - Word

Postdi Anthony47 » 12/07/17 02:10

Grazie FRIEDRICH per aver pubblicato queste interessanti soluzioni....

Per esperienza, l'accesso tramite Indice alle collezioni di word e' sempre molto lenta; molto piu' rapido usare For Each XX In Collection.
Ad esempio il ciclo For i = 1 To ActiveDocument.Sentences.Count /Next su un doc da 1400 sentenze ha impiegato circa 40 sec; l'analogo For Each sentz In ActiveDocument.Sentences /Next ha richiesto pochi decimi (parlo della prima soluzione).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19183
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Trova testo - Word

Postdi peppo55 » 12/07/17 17:22

Ciao AleRosa,

ho provato ad usare il comando Confronta di Word. Mi sembra che funziona bene, infatti ha trovato la frase che è presente sia nel foglio MASTER che nell' APPENDICE .

"la mamma ha poggiato le fragole sul tavolo e dopo poche ore si è resa conto che queste erano sparite."
peppo

Excel 2010
peppo55
Utente Senior
 
Post: 167
Iscritto il: 30/09/12 13:51

Re: Trova testo - Word

Postdi patel » 12/07/17 17:31

Quanto poco lo conosciamo Word !!!
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: Trova testo - Word

Postdi RobiBS » 03/09/19 09:26

ciao. ho copiato il codice, eseguo la macro sul file che mi interessa e mi dice errore compilazione: non valido all'esterno di una routine. grazie
RobiBS
Newbie
 
Post: 1
Iscritto il: 03/09/19 09:20

Re: Trova testo - Word

Postdi Anthony47 » 03/09/19 11:10

Intanto benvenuto nel forum...

Con quel livello di dettaglio dovresti provare sul forum di www.lostregone.it
Qui per avere qualche chance di aiutarti dovremmo sapere quale macro hai copiato, in quale modulo vba l'hai inserito, in quale momento ti compare l'errore, quale riga /testo viene evidenziato al momento dell'errore.
Meglio se, in aggiunta, alleghi anche un fille dimostrativo su cui lavorare.

Per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

Ti aspettiamo...
Avatar utente
Anthony47
Moderatore
 
Post: 19183
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Trova testo - Word":


Chi c’è in linea

Visitano il forum: Nessuno e 55 ospiti