Maison base de données tutoriel mysql 找出多个文本中频率高的单词(2)

找出多个文本中频率高的单词(2)

Jun 07, 2016 pm 03:32 PM
单词 多个 découvrir 文本 频率 haut niveau

接上篇,我打算用 用concurrent包里的CountDownLatch类 去实现。 还是直接上代码吧: Main.java package com.anders.thread;import java.util.HashMap;import java.util.Map;import java.util.concurrent.CountDownLatch;import java.util.concurrent.Execut

接上篇,我打算用用concurrent包里的CountDownLatch类去实现。


还是直接上代码吧:

Main.java

package com.anders.thread;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {

	public static void main(String[] args) {

		int threadNumber = Integer.parseInt(PropertiesUtil.get("ThreadNumber"));

		ExecutorService es = Executors.newFixedThreadPool(threadNumber);
		SingleThreadStatistics[] threads = new SingleThreadStatistics[threadNumber];
		try {
			CountDownLatch doneSignals = new CountDownLatch(threadNumber);

			// 这是在 文件数比线程数多的情况下,若文件比线程数少的话,加个判断就可以了
			for (int i = 0; i  map = mergeThreadMap(threads);

			display(map);

		} catch (InterruptedException e) {
			e.printStackTrace();
		} finally {
			es.shutdown();
		}

	}

	private static Map<string integer> mergeThreadMap(SingleThreadStatistics[] threads) {
		Map<string integer> map = new HashMap<string integer>();

		for (SingleThreadStatistics singleThreadStatistics : threads) {
			Map<string integer> threadMap = singleThreadStatistics.getMap();

			for (Map.Entry<string integer> entry : threadMap.entrySet()) {
				String threadWord = entry.getKey();
				Integer threadWordCount = entry.getValue();
				Integer wordCount = map.get(threadWord);

				if (wordCount == null) {
					map.put(threadWord, threadWordCount);
				} else {
					map.put(threadWord, threadWordCount + wordCount);
				}
			}
		}

		return map;
	}

	private static void display(Map<string integer> map) {

		for (Map.Entry<string integer> entry : map.entrySet()) {
			System.out.print(entry.getKey());
			System.out.println("   ," + entry.getValue());
		}

	}

}
</string></string></string></string></string></string></string>
Copier après la connexion

SingleThreadStatistics.java
package com.anders.thread;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;

public class SingleThreadStatistics implements Runnable {

	private Map<string integer> map = new HashMap<string integer>();
	private CountDownLatch doneSignals;

	public SingleThreadStatistics(CountDownLatch doneSignals) {
		this.doneSignals = doneSignals;
	}

	@Override
	public void run() {

		while (true) {
			File file = FileManager.getFile();
			if (file == null) {
				break;
			}
			FileManager.parseFile(file, map);
		}

		doneSignals.countDown();

	}

	// --------getter/setter------------

	public Map<string integer> getMap() {
		return map;
	}

}
</string></string></string>
Copier après la connexion

FileManager.java
package com.anders.thread;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Manage files and offer single for every thread
 * 
 * @author Anders
 * 
 */
public class FileManager {

	private static List<file> fileList;
	private static int index = 0;

	static {
		String dirPath = PropertiesUtil.get("DirName");
		String path = FileManager.class.getClassLoader().getResource(dirPath).getPath();
		fileList = getFiles(path);
	}

	public synchronized static File getFile() {
		if (index == fileList.size()) {
			return null;
		}
		File file = fileList.get(index);
		index++;
		return file;
	}

	private static List<file> getFiles(String dirPath) {

		File dir = new File(dirPath);
		if (!dir.exists() || !dir.isDirectory()) {
			return Collections.emptyList();
		}

		File[] files = dir.listFiles();

		//判断 是不是  以txt结尾的文件
		Pattern pattern = Pattern.compile(PropertiesUtil.get("FileType"));
		List<file> list = new ArrayList<file>();

		for (File file : files) {
			Matcher matcher = pattern.matcher(file.getName());
			if (matcher.matches()) {
				list.add(file);
			}
		}

		return list;
	}

	//读取文件  使用的是java.nio的filechannel 和bytebuffer
	public static void parseFile(File file, Map<string integer> map) {
		FileInputStream ins = null;
		try {
			ins = new FileInputStream(file);
			FileChannel fIns = ins.getChannel();
			ByteBuffer buffer = ByteBuffer.allocate(1024);

			while (true) {
				buffer.clear();
				int r = fIns.read(buffer);
				if (r == -1) {
					break;
				}
				buffer.flip();
				buffer2word(buffer, map);
			}
			fIns.close();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (ins != null) {
					ins.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	//这个是  将读取的内容,提取出  英语字母
	private static void buffer2word(ByteBuffer buffer, Map<string integer> map) {
		StringBuilder str = new StringBuilder();
		for (int i = 0; i  map) {
		Integer count = map.get(word);
		if (null == count) {
			map.put(word, 1);
		} else {
			map.put(word, ++count);
		}
	}

	//看看是否是  英语字符
	private static boolean isEnglishChar(byte b) {
		//通过ASCLL码  判断
		if (b > 65 && b  97 && b <br>

<p><br>
</p>
config.properties<br>


<pre class="brush:php;toolbar:false">ThreadNumber=3
DirName=txt
FileType=.*.txt
Copier après la connexion


其实我觉得最重要的代码是  FileManager里的

public synchronized static File getFile() {
		if (index == fileList.size()) {
			return null;
		}
		File file = fileList.get(index);
		index++;
		return file;
	}
Copier après la connexion
这部分代码,因为只要  每个thread 分别得到不同的文件,就可以了。

而且还有一个很重要的一点就是  验证index是否已经读取完所有的文件  要和index++放在一个同步块里面,不然会引起线程安全问题


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Qu'est-ce qui a le plus d'impact sur les performances, la fréquence de la mémoire ou le timing ? Qu'est-ce qui a le plus d'impact sur les performances, la fréquence de la mémoire ou le timing ? Feb 19, 2024 am 08:58 AM

La mémoire est l’un des composants les plus importants de l’ordinateur et elle a un impact significatif sur les performances et la stabilité de l’ordinateur. Lors du choix de la mémoire, les gens ont tendance à se concentrer sur deux paramètres importants, à savoir le timing et la fréquence. Alors, pour les performances de la mémoire, qu’est-ce qui est le plus important : le timing ou la fréquence ? Tout d’abord, comprenons les concepts de timing et de fréquence. La synchronisation fait référence à l'intervalle de temps requis par une puce mémoire pour recevoir et traiter les données. Elle est généralement représentée par une valeur CL (CASLatency). Plus la valeur CL est petite, plus la vitesse de traitement de la mémoire est rapide. La fréquence est dans

Que faire si le système Win7 ne peut pas ouvrir le texte txt Que faire si le système Win7 ne peut pas ouvrir le texte txt Jul 06, 2023 pm 04:45 PM

Que dois-je faire si le système Win7 ne peut pas ouvrir le texte txt ? Lorsque nous devons modifier des fichiers texte sur nos ordinateurs, le moyen le plus simple est d'utiliser des outils de texte. Cependant, certains utilisateurs constatent que leurs ordinateurs ne peuvent pas ouvrir les fichiers texte txt. Alors, comment résoudre ce problème ? Jetons un coup d'œil au didacticiel détaillé pour résoudre le problème de l'impossibilité d'ouvrir le texte txt dans le système win7. Tutoriel pour résoudre le problème selon lequel le système Win7 ne peut pas ouvrir le texte txt. 1. Cliquez avec le bouton droit sur n'importe quel fichier txt sur le bureau, vous pouvez cliquer avec le bouton droit pour créer un nouveau document texte, puis sélectionner les propriétés, comme indiqué. illustré ci-dessous : 2. Dans la fenêtre des propriétés txt ouverte, recherchez le bouton de modification sous les options générales, comme indiqué dans la figure ci-dessous : 3. Dans le paramètre du mode d'ouverture contextuel

Essayez de nouvelles sonneries et tonalités de texte : découvrez les dernières alertes sonores sur iPhone sous iOS 17 Essayez de nouvelles sonneries et tonalités de texte : découvrez les dernières alertes sonores sur iPhone sous iOS 17 Oct 12, 2023 pm 11:41 PM

Dans iOS 17, Apple a remanié toute sa sélection de sonneries et de tonalités de texte, offrant plus de 20 nouveaux sons pouvant être utilisés pour les appels, les messages texte, les alarmes et bien plus encore. Voici comment les voir. De nombreuses nouvelles sonneries sont plus longues et semblent plus modernes que les anciennes sonneries. Ils incluent arpège, brisé, canopée, cabine, gazouillis, aube, départ, dolop, voyage, bouilloire, mercure, galaxie, quad, radial, charognard, semis, abri, saupoudrage, marches, heure du conte, taquiner, inclinaison, déplier et vallée. La réflexion reste l'option de sonnerie par défaut. Plus de 10 nouvelles tonalités de texte sont également disponibles pour les messages texte entrants, les messages vocaux, les alertes de courrier entrant, les alertes de rappel, etc. Pour accéder à de nouvelles sonneries et tonalités de texte, assurez-vous d'abord que votre iPhone

Utiliser de grands modèles pour créer un nouveau paradigme pour la formation aux résumés de texte Utiliser de grands modèles pour créer un nouveau paradigme pour la formation aux résumés de texte Jun 10, 2023 am 09:43 AM

1. Tâche de texte Cet article traite principalement de la méthode de résumé génératif de texte et de la manière d'utiliser l'apprentissage contrastif et les grands modèles pour mettre en œuvre le dernier paradigme de formation à la synthèse générative de texte. Il s'agit principalement de deux articles, l'un est BRIO : Bringing Order to Abstractive Summarization (2022), qui utilise l'apprentissage contrastif pour introduire des tâches de classement dans le modèle génératif ; l'autre est OnLearning to Summarize with Large Language Models as References (2023), qui approfondit introduit de grands modèles pour générer des données de formation de haute qualité basées sur BRIO. 2. Méthodes de formation à la synthèse de texte générative et

Comment rechercher du texte dans tous les onglets de Chrome et Edge Comment rechercher du texte dans tous les onglets de Chrome et Edge Feb 19, 2024 am 11:30 AM

Ce didacticiel vous montre comment rechercher du texte ou des phrases spécifiques sur tous les onglets ouverts dans Chrome ou Edge sous Windows. Existe-t-il un moyen d'effectuer une recherche de texte sur tous les onglets ouverts dans Chrome ? Oui, vous pouvez utiliser une extension Web externe gratuite dans Chrome pour effectuer des recherches de texte sur tous les onglets ouverts sans avoir à changer d'onglet manuellement. Certaines extensions comme TabSearch et Ctrl-FPlus peuvent vous aider à y parvenir facilement. Comment rechercher du texte dans tous les onglets de Google Chrome ? Ctrl-FPlus est une extension gratuite qui permet aux utilisateurs de rechercher facilement un mot, une expression ou un texte spécifique dans tous les onglets de la fenêtre de leur navigateur. Cette extension

Comment utiliser Microsoft Reader Coach avec Immersive Reader Comment utiliser Microsoft Reader Coach avec Immersive Reader Mar 09, 2024 am 09:34 AM

Dans cet article, nous allons vous montrer comment utiliser Microsoft Reading Coach dans Immersive Reader sur un PC Windows. Les fonctionnalités de guidage en lecture aident les étudiants ou les individus à pratiquer la lecture et à développer leurs compétences en lecture. Vous commencez par lire un passage ou un document dans une application prise en charge, et sur cette base, votre rapport de lecture est généré par l'outil Reading Coach. Le rapport de lecture indique votre précision de lecture, le temps qu'il vous a fallu pour lire, le nombre de mots corrects par minute et les mots que vous avez trouvés les plus difficiles lors de la lecture. Vous pourrez également pratiquer les mots, ce qui vous aidera à développer vos compétences en lecture en général. Actuellement, seuls Office ou Microsoft365 (y compris OneNote pour le Web et Word pour We)

ASUS TUF Z790 Plus est compatible avec la fréquence de mémoire ASUS MCP79 ASUS TUF Z790 Plus est compatible avec la fréquence de mémoire ASUS MCP79 Jan 03, 2024 pm 04:18 PM

ASUS tufz790plus prend en charge la fréquence de mémoire. La carte mère ASUS TUFZ790-PLUS est une carte mère hautes performances qui prend en charge la mémoire DDR4 double canal et prend en charge jusqu'à 64 Go de mémoire. Sa fréquence mémoire est très puissante, jusqu'à 4800MHz. Les fréquences de mémoire spécifiques prises en charge incluent 2 133 MHz, 2 400 MHz, 2 666 MHz, 2 800 MHz, 3 000 MHz, 3 200 MHz, 3 600 MHz, 3 733 MHz, 3 866 MHz, 4 000 MHz, 4 133 MHz, 4 266 MHz, 4 400 MHz, 4 533 MHz, 4 600 MHz, 4 733 MHz et . Qu'il s'agisse d'un usage quotidien ou de besoins de haute performance

Après avoir discuté en ligne pendant un mois, l'escroc tueur de cochons a été vaincu par l'IA ! 2 millions d'internautes ont crié choqués Après avoir discuté en ligne pendant un mois, l'escroc tueur de cochons a été vaincu par l'IA ! 2 millions d'internautes ont crié choqués Apr 12, 2023 am 09:40 AM

En parlant de « plaque à tuer les cochons », tout le monde doit la détester avec des démangeaisons. Dans ce type de fraude aux rencontres et au mariage en ligne, les escrocs recherchent à l’avance des victimes faciles à tomber, et ce sont souvent des filles innocentes, bienveillantes et bien élevées avec de beaux fantasmes d’amour. Afin de combattre ces escrocs pendant 500 rounds, "Turing's Cat", un nouveau venu bien connu dans le cercle technologique de la Station B, a formé une IA qui fait fréquemment des blagues hilarantes lorsqu'elle discute et qui est encore meilleure qu'une vraie personne. En conséquence, grâce au fonctionnement de l'IA, l'escroc a été confondu par cette fausse dame et a directement transféré 520 à « elle ». Ce qui est encore plus drôle, c'est qu'après avoir découvert que l'escroc n'avait aucune chance de profiter de lui, non seulement il a fini par briser sa défense, mais il a également reçu une « citation célèbre » de l'IA : Dès que le La vidéo est sortie, elle est immédiatement devenue virale et les amis surfant à la station B ont tous été dupés.

See all articles