En Java, comment trouver l'occurrence maximale de mots à partir d'un fichier texte ?
Publié: 2021-09-13
Dans ce didacticiel Java, vous apprendrez comment trouver l'occurrence maximale de mots à partir d'un fichier texte donné ?
Voici une logique pour obtenir l'élément supérieur :
- Créez une classe
CrunchifyComparable
qui peut stocker la valeur String du mot et le nombre d'occurrences qu'il apparaît. - Implémentez l'interface Comparable pour cette classe pour
sort by occurrences first and then alphabetically
si le nombre d'occurrences est le même -
crunchifyFindMaxOccurrence
, vous créez une nouvelle liste deCrunchifyComparable
à partir de votre carte d'origine. Vous ajoutez les entrées de ceci à votre liste - Trier cette liste
- Prenez les n premiers éléments de cette liste en utilisant subList
- Ajoutez des chaînes à la
List<String>
et vous le renvoyez
Another most read
: Trouver plus d'informations sur equals() et hashcode()
Code Java :
Créez la classe CrunchifyFindMaxOccurrence.java. Mettez le code ci-dessous dans le fichier.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
package crunchify . com . tutorials ; import java . io . * ; import java . util . * ; public class CrunchifyFindMaxOccurrence { /** * @author Crunchify.com * In Java How to Find Maximum Occurrence of Words from Text File? */ public static void main ( String [ ] args ) throws FileNotFoundException , IOException { // File: An abstract representation of file and directory pathnames. // User interfaces and operating systems use system-dependent pathname strings to name files and directories. // This class presents an abstract, system-independent view of hierarchical pathnames. File file = new File ( "/Users/app/Download/crunchify.txt" ) ; // BufferedReader: Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines. // The buffer size may be specified, or the default size may be used. // The default is large enough for most purposes. BufferedReader bufferedReader = null ; bufferedReader = new BufferedReader ( new FileReader ( file ) ) ; String inputLine = null ; // Map: An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value. Map < String , Integer > crunchifyMap = new HashMap < > ( ) ; try { while ( ( inputLine = bufferedReader . readLine ( ) ) ! = null ) { // split(): Splits this string around matches of the given regular expression. // This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. // Trailing empty strings are therefore not included in the resulting array. String [ ] words = inputLine . split ( "[ \n\t\r.,;:!?(){}]" ) ; for ( String word : words ) { String key = word . toLowerCase ( ) ; // remove .toLowerCase for Case Sensitive result. if ( key . length ( ) > 0 ) { if ( crunchifyMap . get ( key ) == null ) { crunchifyMap . put ( key , 1 ) ; } else { int value = crunchifyMap . get ( key ) . intValue ( ) ; value ++ ; crunchifyMap . put ( key , value ) ; } } } } // Set: A collection that contains no duplicate elements. // More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), // and at most one null element. As implied by its name, this interface models the mathematical set abstraction. Set < Map . Entry < String , Integer > > entrySet = crunchifyMap . entrySet ( ) ; crunchifyPrint ( "Words" + "\t\t" + "# of Occurances" ) ; for ( Map . Entry < String , Integer > entry : entrySet ) { crunchifyPrint ( entry . getKey ( ) + "\t\t" + entry . getValue ( ) ) ; } List <String> myTopOccurrence = crunchifyFindMaxOccurrence ( crunchifyMap , 1 ) ; crunchifyPrint ( "\nMaximum Occurrence of Word in file: " ) ; for ( String result : myTopOccurrence ) { crunchifyPrint ( "==> " + result ) ; } // IOException: Signals that an I/O exception of some sort has occurred. // This class is the general class of exceptions produced by failed or interrupted I/O operations. } catch ( IOException error ) { crunchifyPrint ( "Invalid File" ) ; } finally { bufferedReader . close ( ) ; } } private static void crunchifyPrint ( String s ) { System . out . println ( s ) ; } /** * @param map = All Words in map * @param n = How many top elements you want to print? If n=1 it will print the highest occurrence word. If n=2 it * will print top 2 highest occurrence words. * @returns list of String */ public static List <String> crunchifyFindMaxOccurrence ( Map < String , Integer > map , int n ) { List <CrunchifyComparable> l = new ArrayList < > ( ) ; for ( Map . Entry < String , Integer > entry : map . entrySet ( ) ) l . add ( new CrunchifyComparable ( entry . getKey ( ) , entry . getValue ( ) ) ) ; // sort(): Sorts the specified list into ascending order, according to the natural ordering of its elements. // All elements in the list must implement the Comparable interface. Furthermore, all elements in the list must be mutually comparable // (that is, e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the list). Collections . sort ( l ) ; List <String> list = new ArrayList < > ( ) ; // subList(): Returns a view of the portion of this list between the specified fromIndex, // inclusive, and toIndex, exclusive. (If fromIndex and toIndex are equal, the returned list is empty.) // The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa. // The returned list supports all of the optional list operations supported by this list. for ( CrunchifyComparable w : l . subList ( 0 , n ) ) list . add ( w . wordFromFile + ":" + w . numberOfOccurrence ) ; return list ; } } class CrunchifyComparable implements Comparable <CrunchifyComparable> { public String wordFromFile ; public int numberOfOccurrence ; public CrunchifyComparable ( String wordFromFile , int numberOfOccurrence ) { super ( ) ; this . wordFromFile = wordFromFile ; this . numberOfOccurrence = numberOfOccurrence ; } @Override public int compareTo ( CrunchifyComparable arg0 ) { int crunchifyCompare = Integer . compare ( arg0 . numberOfOccurrence , this . numberOfOccurrence ) ; return crunchifyCompare ! = 0 ? crunchifyCompare : wordFromFile . compareTo ( arg0 . wordFromFile ) ; } @Override public int hashCode ( ) { final int uniqueNumber = 19 ; int crunchifyResult = 9 ; crunchifyResult = uniqueNumber * crunchifyResult + numberOfOccurrence ; // hasCode(): Returns a hash code for this string. The hash code for a String object is computed as // s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] // // using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, // and ^ indicates exponentiation. (The hash value of the empty string is zero.) crunchifyResult = uniqueNumber * crunchifyResult + ( ( wordFromFile == null ) ? 0 : wordFromFile . hashCode ( ) ) ; return crunchifyResult ; } // Override: Indicates that a method declaration is intended to override a method declaration in a supertype. // If a method is annotated with this annotation type compilers are required // to generate an error message unless at least one of the following conditions hold: // The method does override or implement a method declared in a supertype. // The method has a signature that is override-equivalent to that of any public method declared in Object. @Override public boolean equals ( Object crunchifyObj ) { if ( this == crunchifyObj ) return true ; if ( crunchifyObj == null ) return false ; if ( getClass ( ) ! = crunchifyObj . getClass ( ) ) return false ; CrunchifyComparable other = ( CrunchifyComparable ) crunchifyObj ; if ( numberOfOccurrence ! = other . numberOfOccurrence ) return false ; if ( wordFromFile == null ) { if ( other . wordFromFile ! = null ) return false ; } else if ( ! wordFromFile . equals ( other . wordFromFile ) ) return false ; return true ; } } |
Exemple-1 fichier :
1 2 3 |
Crunchify is the largest free , premium , technical & blogging resource site for beginners , who are passionate & have the desire to excel in the online world . Attracting over 16 million monthly users , we are leading & trusted tech + blogging resource for all . We also help clients transform their great ideas into reality ! Crunchify , Crunchify , Crunchify . com |
Sortir:
Voici un résultat de la console IntelliJ IDEA. Exécutez le programme ci-dessus en tant qu'application Java et vous verrez le résultat comme ci-dessous.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
/ Library / Java / JavaVirtualMachines / jdk - 15.jdk / Contents / Home / bin / java - javaagent : / Applications / IntelliJ IDEA . app / Contents / lib / idea_rt . jar = 50339 : / Applications / IntelliJ IDEA . app / Contents / bin - Dfile . encoding = UTF - 8 - classpath / Users / app / crunchify / github / CrunchifyTutorials / target / classes : / Users / app / crunchify / github / CrunchifyTutorials / WebContent / WEB - INF / lib / zxing - 2.1.jar : / Users / app / crunchify / github / CrunchifyTutorials / WebContent / WEB - INF / lib / commons - logging - 1.1.2.jar : / Users / app / crunchify / github / CrunchifyTutorials / WebContent / WEB - INF / lib / commons - collections - 3.2.1.jar : / Users / app / crunchify / github / CrunchifyTutorials / WebContent / WEB - INF / lib / javax . mail . jar : / Users / app / crunchify / github / CrunchifyTutorials / WebContent / WEB - INF / lib / commons - io - 2.4.jar : / Users / app / crunchify / github / CrunchifyTutorials / WebContent / WEB - INF / lib / commons - lang - 2.6.jar : / Users / app / crunchify / github / CrunchifyTutorials / WebContent / WEB - INF / lib / commons - configuration - 1.9.jar : / Users / app / crunchify / github / CrunchifyTutorials / WebContent / WEB - INF / lib / log4j - 1.2.17.jar : / Users / app / crunchify / github / CrunchifyTutorials / WebContent / WEB - INF / lib / commons - beanutils - 1.8.3.jar : / Users / app / Library / Application Support / JetBrains / IntelliJIdea2021 . 2 / javascript / extLibs / http_code . jquery . com_jquery - 3.6.0.js : / Users / app / . m2 / repository / org / glassfish / javax . json / 1.1.4 / javax . json - 1.1.4.jar : / Users / app / . m2 / repository / com / github / wnameless / json - flattener / 0.2.2 / json - flattener - 0.2.2.jar : / Users / app / . m2 / repository / com / eclipsesource / minimal - json / minimal - json / 0.9.4 / minimal - json - 0.9.4.jar : / Users / app / . m2 / repository / com / github / wnameless / json / json - flattener / 0.12.0 / json - flattener - 0.12.0.jar : / Users / app / . m2 / repository / com / fasterxml / jackson / core / jackson - databind / 2.12.0 / jackson - databind - 2.12.0.jar : / Users / app / . m2 / repository / com / fasterxml / jackson / core / jackson - annotations / 2.12.0 / jackson - annotations - 2.12.0.jar : / Users / app / . m2 / repository / com / fasterxml / jackson / core / jackson - core / 2.12.0 / jackson - core - 2.12.0.jar : / Users / app / . m2 / repository / org / apache / commons / commons - text / 1.9 / commons - text - 1.9.jar : / Users / app / . m2 / repository / com / github / wnameless / json / json - base / 2.0.0 / json - base - 2.0.0.jar : / Users / app / . m2 / repository / commons - io / commons - io / 2.10.0 / commons - io - 2.10.0.jar : / Users / app / . m2 / repository / com / google / code / gson / gson / 2.8.7 / gson - 2.8.7.jar : / Users / app / . m2 / repository / net / jodah / expiringmap / 0.5.9 / expiringmap - 0.5.9.jar : / Users / app / . m2 / repository / org / apache / httpcomponents / httpclient / 4.5.13 / httpclient - 4.5.13.jar : / Users / app / . m2 / repository / org / apache / httpcomponents / httpcore / 4.4.13 / httpcore - 4.4.13.jar : / Users / app / . m2 / repository / commons - codec / commons - codec / 1.11 / commons - codec - 1.11.jar : / Users / app / . m2 / repository / org / json / json / 20210307 / json - 20210307.jar : / Users / app / . m2 / repository / net / spy / spymemcached / 2.12.3 / spymemcached - 2.12.3.jar : / Users / app / . m2 / repository / com / whalin / Memcached - Java - Client / 3.0.2 / Memcached - Java - Client - 3.0.2.jar : / Users / app / . m2 / repository / commons - pool / commons - pool / 1.5.6 / commons - pool - 1.5.6.jar : / Users / app / . m2 / repository / com / googlecode / xmemcached / xmemcached / 2.4.7 / xmemcached - 2.4.7.jar : / Users / app / . m2 / repository / com / paypal / sdk / rest - api - sdk / 1.14.0 / rest - api - sdk - 1.14.0.jar : / Users / app / . m2 / repository / org / apache / commons / commons - dbcp2 / 2.8.0 / commons - dbcp2 - 2.8.0.jar : / Users / app / . m2 / repository / org / apache / commons / commons - pool2 / 2.8.1 / commons - pool2 - 2.8.1.jar : / Users / app / . m2 / repository / commons - dbcp / commons - dbcp / 20030825.184428 / commons - dbcp - 20030825.184428.jar : / Users / app / . m2 / repository / javax / ws / rs / javax . ws . rs - api / 2.1.1 / javax . ws . rs - api - 2.1.1.jar : / Users / app / . m2 / repository / org / hamcrest / hamcrest - all / 1.3 / hamcrest - all - 1.3.jar : / Users / app / . m2 / repository / org / apache / logging / log4j / log4j - core / 2.14.1 / log4j - core - 2.14.1.jar : / Users / app / . m2 / repository / org / apache / logging / log4j / log4j - api / 2.14.1 / log4j - api - 2.14.1.jar : / Users / app / . m2 / repository / com / google / guava / guava / 30.1.1 - jre / guava - 30.1.1 - jre . jar : / Users / app / . m2 / repository / com / google / guava / failureaccess / 1.0.1 / failureaccess - 1.0.1.jar : / Users / app / . m2 / repository / com / google / guava / listenablefuture / 9999.0 - empty - to - avoid - conflict - with - guava / listenablefuture - 9999.0 - empty - to - avoid - conflict - with - guava . jar : / Users / app / . m2 / repository / com / google / code / findbugs / jsr305 / 3.0.2 / jsr305 - 3.0.2.jar : / Users / app / . m2 / repository / org / checkerframework / checker - qual / 3.8.0 / checker - qual - 3.8.0.jar : / Users / app / . m2 / repository / com / google / errorprone / error_prone_annotations / 2.5.1 / error_prone_annotations - 2.5.1.jar : / Users / app / . m2 / repository / com / google / j2objc / j2objc - annotations / 1.3 / j2objc - annotations - 1.3.jar : / Users / app / . m2 / repository / com / googlecode / json - simple / json - simple / 1.1.1 / json - simple - 1.1.1.jar : / Users / app / . m2 / repository / junit / junit / 4.10 / junit - 4.10.jar : / Users / app / . m2 / repository / org / hamcrest / hamcrest - core / 1.1 / hamcrest - core - 1.1.jar : / Users / app / . m2 / repository / commons - net / commons - net / 3.8.0 / commons - net - 3.8.0.jar : / Users / app / . m2 / repository / org / ow2 / asm / asm / 9.1 / asm - 9.1.jar : / Users / app / . m2 / repository / axis / axis / 1.4 / axis - 1.4.jar : / Users / app / . m2 / repository / org / apache / axis / axis - jaxrpc / 1.4 / axis - jaxrpc - 1.4.jar : / Users / app / . m2 / repository / axis / axis - wsdl4j / 1.5.1 / axis - wsdl4j - 1.5.1.jar : / Users / app / . m2 / repository / commons - beanutils / commons - beanutils / 1.9.4 / commons - beanutils - 1.9.4.jar : / Users / app / . m2 / repository / commons - collections / commons - collections / 3.2.2 / commons - collections - 3.2.2.jar : / Users / app / . m2 / repository / org / apache / commons / commons - collections4 / 4.4 / commons - collections4 - 4.4.jar : / Users / app / . m2 / repository / org / apache / commons / commons - configuration2 / 2.7 / commons - configuration2 - 2.7.jar : / Users / app / . m2 / repository / commons - discovery / commons - discovery / 0.5 / commons - discovery - 0.5.jar : / Users / app / . m2 / repository / org / apache / commons / commons - lang3 / 3.12.0 / commons - lang3 - 3.12.0.jar : / Users / app / . m2 / repository / commons - logging / commons - logging / 1.2 / commons - logging - 1.2.jar : / Users / app / . m2 / repository / commons - logging / commons - logging - api / 1.1 / commons - logging - api - 1.1.jar : / Users / app / . m2 / repository / javax / mail / javax . mail - api / 1.6.2 / javax . mail - api - 1.6.2.jar : / Users / app / . m2 / repository / javax / mail / mail / 1.4.7 / mail - 1.4.7.jar : / Users / app / . m2 / repository / javax / activation / activation / 1.1 / activation - 1.1.jar : / Users / app / . m2 / repository / javax / xml / jaxrpc - api / 1.1 / jaxrpc - api - 1.1.jar : / Users / app / . m2 / repository / org / apache / axis / axis - saaj / 1.4 / axis - saaj - 1.4.jar : / Users / app / . m2 / repository / wsdl4j / wsdl4j / 1.6.3 / wsdl4j - 1.6.3.jar : / Users / app / . m2 / repository / com / google / zxing / core / 3.4.1 / core - 3.4.1.jar : / Users / app / . m2 / repository / org / apache / commons / commons - compress / 1.20 / commons - compress - 1.20.jar : / Users / app / . m2 / repository / mysql / mysql - connector - java / 8.0.25 / mysql - connector - java - 8.0.25.jar : / Users / app / . m2 / repository / com / google / protobuf / protobuf - java / 3.11.4 / protobuf - java - 3.11.4.jar : / Users / app / . m2 / repository / ch / qos / logback / logback - classic / 1.3.0 - alpha5 / logback - classic - 1.3.0 - alpha5 . jar : / Users / app / . m2 / repository / ch / qos / logback / logback - core / 1.3.0 - alpha5 / logback - core - 1.3.0 - alpha5 . jar : / Users / app / . m2 / repository / com / sun / mail / javax . mail / 1.6.2 / javax . mail - 1.6.2.jar : / Users / app / . m2 / repository / edu / washington / cs / types / checker / checker - framework / 1.7.0 / checker - framework - 1.7.0.jar : / Users / app / . m2 / repository / commons - validator / commons - validator / 1.7 / commons - validator - 1.7.jar : / Users / app / . m2 / repository / commons - digester / commons - digester / 2.1 / commons - digester - 2.1.jar : / Users / app / . m2 / repository / org / springframework / spring - context / 5.3.8 / spring - context - 5.3.8.jar : / Users / app / . m2 / repository / org / springframework / spring - aop / 5.3.8 / spring - aop - 5.3.8.jar : / Users / app / . m2 / repository / org / springframework / spring - beans / 5.3.8 / spring - beans - 5.3.8.jar : / Users / app / . m2 / repository / org / springframework / spring - core / 5.3.8 / spring - core - 5.3.8.jar : / Users / app / . m2 / repository / org / springframework / spring - jcl / 5.3.8 / spring - jcl - 5.3.8.jar : / Users / app / . m2 / repository / org / springframework / spring - expression / 5.3.8 / spring - expression - 5.3.8.jar : / Users / app / . m2 / repository / org / springframework / spring - context - support / 5.3.8 / spring - context - support - 5.3.8.jar : / Users / app / . m2 / repository / org / slf4j / slf4j - api / 1.7.31 / slf4j - api - 1.7.31.jar : / Users / app / . m2 / repository / org / slf4j / jul - to - slf4j / 1.7.31 / jul - to - slf4j - 1.7.31.jar : / Users / app / . m2 / repository / org / slf4j / jcl - over - slf4j / 1.7.31 / jcl - over - slf4j - 1.7.31.jar : / Users / app / . m2 / repository / org / slf4j / log4j - over - slf4j / 1.7.31 / log4j - over - slf4j - 1.7.31.jar crunchify . com . tutorials . CrunchifyFindMaxOccurrence Words # of Occurances com 1 largest 1 clients 1 technical 1 passionate 1 leading 1 for 2 their 1 we 2 into 1 transform 1 premium 1 world 1 are 2 attracting 1 have 1 free 1 crunchify 4 over 1 tech 1 all 1 desire 1 blogging 2 resource 2 in 1 16 1 & 3 is 1 also 1 ideas 1 + 1 great 1 users 1 the 3 excel 1 help 1 site 1 million 1 trusted 1 beginners 1 monthly 1 online 1 reality 1 to 1 who 1 Maximum Occurrence of Word in file : == > crunchify : 4 Process finished with exit code 0 |
Exemple-2 Fichier :
1 |
this and and and then and this |
Sortir:
1 2 3 4 5 6 7 |
Words # of Occurances and 4 this 2 then 1 Maixmum Occurance of Word in file : == > and : 4 |
Cherchez-vous plus de tutoriels java? Regardez cette collection.
