SDL 使用,播放一张图片实例

运用前面几篇文章中的分词算法,可以把中文中的词语分出来,但是不同算法可能得到的分词结果不一样,到底如何确定那种分词效果最好呢。我们在这篇文章中探讨一种判断分词效果好坏的方法。

在分词的时候,有些单字是不成词的。可以搜索所有分词的可能性,然后对每一种分词结果进行统计,规则如下:每分出一个词就给分词统计结果加一,如果遇到不成词的单字就再给该分词结果加一。得到的结果分别计算出来。选出一个得分最低的就是所要分词的字符串的结果。

下面就用代码实现一下上面的思想。分别用正向最大匹配和逆向最大匹配,然后在对分词结果进行统计,选出一个最好的结果

package com;

import java.util.ArrayList;
import java.util.List;

public class Segmentation4 {
	private List<String> dictionary = new ArrayList<String>();
	private List<String> notWords = new ArrayList<String>();
	private static String request = "他说的确实在理";

	public void setDictionary() {
		dictionary.add("的确");
		dictionary.add("确实");
		dictionary.add("实在");
		dictionary.add("在理");
	}

	public void setNotWords() {
		notWords.add("确");
		notWords.add("实");
		notWords.add("理");
	}

	public String leftMax() {
		String response = "";
		String s = "";
		for(int i=0; i<request.length(); i++) {
			s += request.charAt(i);
			if(isIn(s, dictionary) && aheadCount(s, dictionary)==1) {
				response += (s + "/");
				s = "";
			} else if(aheadCount(s, dictionary) > 0) {

			} else {
				response += (s + "/");
				s = "";
			}
		}
		return response;
	}

	private boolean isIn(String s, List<String> list) {
		for(int i=0; i<list.size(); i++) {
			if(s.equals(list.get(i))) return true;
		}
		return false;
	}

	private int aheadCount(String s, List<String> list) {
		int count = 0;
		for(int i=0; i<list.size(); i++) {
			if((s.length()<=list.get(i).length()) && (s.equals(list.get(i).substring(0, s.length())))) count ++;
		}
		return count;
	}

	public String rightMax() {
		String response = "";
		String s = "";
		for(int i=request.length()-1; i>=0; i--) {
			s = request.charAt(i) + s;
			if(isIn(s, dictionary) && tailCount(s, dictionary)==1) {
				response = (s + "/") + response;
				s = "";
			} else if(tailCount(s, dictionary) > 0) {

			} else {
				response = (s + "/") + response;
				s = "";
			}
		}
		return response;
	}

	private int tailCount(String s, List<String> list) {
		int count = 0;
		for(int i=0; i<list.size(); i++) {
			if((s.length()<=list.get(i).length()) && (s.equals(list.get(i).substring(list.get(i).length()-s.length(), list.get(i).length())))) count ++;
		}
		return count;
	}

	public int getCount(String s) {
		String[] words = s.split("/");
		int count = words.length;
		for(String word : words) {
			if(isIn(word, notWords)) count++;
		}
		return count;
	}

	public static void main(String[] args) {
		System.out.println(request);
		String response;
		Segmentation4 seg = new Segmentation4();
		seg.setDictionary();
		seg.setNotWords();
		String response1 = seg.leftMax();
		System.out.println(response1);
		String response2 = seg.rightMax();
		System.out.println(response2);
		if(seg.getCount(response1)<=seg.getCount(response2))
			response = response1;
		else response = response2;
		System.out.println(response);
	}
}

上面程序运行的结果是:

他说的确实在理

他/说/的确/实在/理/

他/说/的/确实/在理/

他/说/的/确实/在理/

SDL 使用,播放一张图片实例,布布扣,bubuko.com

时间: 2025-01-07 12:36:37

SDL 使用,播放一张图片实例的相关文章

FFMPEG + SDL音频播放分析

目录 [hide] 1 抽象流程: 2 关键实现: 2.1 main()函数 2.2 decode_thread()读取文件信息和音频包 2.3 stream_component_open():设置音频参数和打开设备 2.4 audio_callback(): 回调函数,向SDL缓冲区填充数据 2.5 audio_decode_frame():解码音频 3 FFMPEG结构体 3.1 channel_layout_map 4 FFMPEG宏定义 4.1 Audio channel conveni

SDL音频播放

gcc -o tutorial03 tutorial03.c -lavutil -lavformat -lavcodec -lz -lm \`sdl-config --cflags --libs` AUDIO名词解释:samples:采样,通过PCM来采样,通常样本16bit,PCM的采样精度从14-bit发展到16-bit.18-bit.20-bit直到24-bitSamples rate:采样率,22.05KHz and 44.1KHz,每秒从连续信号中提取并组成离散信号的采样个数位速:采样

循环播放一张图片,如果图片大小小于屏幕,继续使用该图片进行填充

场景: 需要做出来的效果差不多如标题所述,即如果屏幕宽度为720,而图片的宽度只有150,现在需要从中间开始,往两边移动该图片, 我们现在以往右边移动为例,如果往右移动了150,此时绘制了一整个完整图形,继续移动,此时不仅要从中间绘制出新的图形,已经绘制的完整图形也得向右移动.进而达到动画的效果. 分析: 为了达到上面的效果,最开始想到的是使用动画,但是发现: 1)如果选择平移动画,只能移动图片,不会保留之前图片走过的路径,这样的话背景图就不会出现连续的情况,而只是有单张图,并不是这里想要的.

安卓MP3播放器开发实例(1)之音乐列表界面

学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正规.这个项目是当时借鉴Mars老师的初学视频做的安州手机的MP3播放器.自己又进行了改进,特别在歌词的优化和加入进度条方面的.因为是8个月前做的,水平非常0基础,bug应该非常多,如今自己又懒得再一次改进,仅仅希望可以给初学的朋友们提供一些帮助.或者起到抛砖引玉的效果.那我就心惬意足了. 先整体介绍

安卓MP3播放器开发实例(3)之进度条和歌词更新的实现

上一次谈了音乐播放的实现,这次说下最复杂的进度条和歌词更新.因为须要在播放的Activity和播放的Service间进行交互,所以就涉及了Activity对Service的绑定以及绑定后数据的传输,这个须要对服务绑定熟悉才干够理解.原理不复杂.可是步骤略微繁琐,代码贴起来可能会非常混乱. 进度条和歌词放在一起说比較好,不然比較混乱.进度条的调整大家都懂的,就是进度条调到哪里歌曲的播放就跟到哪里,歌词也得跟到哪里.首先看下上一篇看过的開始button监听事件中服务的绑定代码: //绑定播放服务 b

web upload 上传多张图片实例

首先要引用web upload插件: <link rel="stylesheet" type="text/css" href="css/webuploader.css"><script type="text/javascript" src="js/jquery-1.8.3.min.js"></script><script type="text/javasc

Android怎样播放多张图片形成一个动画

在Android里可以逐帧的播放图片,然后产生一种动态的效果,准备好几张连续的图片,然后在于源程序res文件夹下建立anim文件夹,然后新建一个XML XML代码如下: <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot=&

Android简单的利用SoundPool进行播放铃声的实例代码

MainActivity.java package com.example.pengdonglin.soundpool_demo; import android.annotation.SuppressLint; import android.media.AudioManager; import android.media.SoundPool; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; im

帧动画 连续播放多张图片动画 以及ui动画 SoundPool

drawable下有很多图片  可以 1 <?xml version="1.0" encoding="utf-8"?> 2 <animation-list android:oneshot="false" 3 xmlns:android="http://schemas.android.com/apk/res/android"> 4 <item android:duration="20&qu