- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发各种统计数据的应用程序。其中一项任务是分析大量句子的字数。
规范为:
这是我目前的方法:
db.execSQL("create temp table if not exists WORDS (WORD varchar, SENT integer)");
Cursor c1 = db.rawQuery("select lower(MSG) as SENTENCE, SENT from MESSAGELIST",null);
while (c.moveToNext()) {
String[] words = c.getString(c.getColumnIndex("SENTENCE")).split(
"\\s+");
int from_me = c.getInt(c.getColumnIndex("SENT"));
for (int i = 0; i < words.length; i++) {
words[i] = words[i].replaceAll("[^a-zA-z]", "");
if (!words[i].equals("")) {
db.execSQL("insert into WORDS values ('" + words[i] + "', "
+ from_me + ")");
}
}
}
Cursor c2 = db.rawQuery(
"select WORD, COUNT(*) as CNT from WORDS where SENT=0 group by WORD order by CNT desc limit 10",
null);
Cursor c3 = db.rawQuery(
"select WORD, COUNT(*) as CNT from WORDS where SENT=1 group by WORD order by CNT desc limit 10",
null);
因为我已经假设这段代码非常慢。我猜字符串操作需要很多时间。
仅仅为了查询而从数据库中提取并重新输入数据库也感觉不对。但是,我知道 PostgreSQL
中有 regexp_split_to_array
和 regexp_split_to_table
,这使得可以保留在数据库上进行查询。我还没有找到在 SQLite
我花了很多时间试图找出不同的解决方案,但现在有点陷入困境。是否有任何(相对)快速的方法来执行所需的任务?我也欢迎提出建议,使字数统计尽可能合理。
当前版本以及一些建议的实现:
改进:
用于计数的 HashMultiset:快约 2%
c = db.rawQuery("select lower(DATA) as SENTENCE, SENT from MESSAGELIST", null);
CharMatcher pat_rep = CharMatcher.inRange('A', 'Z')
.or(CharMatcher.inRange('a', 'z')).precomputed();
Pattern pat_split = Pattern.compile("\\s");
HashMultiset<String> sent = HashMultiset.create();
HashMultiset<String> rcvd = HashMultiset.create();
while (c.moveToNext()) {
String[] words = pat_split.split(c.getString(c.getColumnIndex("SENTENCE")));
int from_me = c.getInt(c.getColumnIndex("SENT"));
for (int i = 0; i < words.length; i++) {
words[i] = pat_rep.retainFrom(words[i]);
if (!words[i].equals("")) {
if (from_me == 1) {
sent.add(words[i]);
} else {
rcvd.add(words[i]);
}
}
}
}
db.execSQL("create temp table if not exists WORDS (WORD varchar, SENT integer, CNT integer)");
SQLiteStatement ins = db.compileStatement("insert into WORDS values (?, ?, ?)");
db.beginTransaction();
Iterator<String> i = sent.iterator();
while (i.hasNext()) {
String in = i.next();
ins.bindString(1, in);
ins.bindLong(2, 1);
ins.bindLong(3, sent.count(in));
ins.executeInsert();
ins.clearBindings();
}
i = rcvd.iterator();
while (i.hasNext()) {
String in = i.next();
ins.bindString(1, in);
ins.bindLong(2, 0);
ins.bindLong(3, rcvd.count(in));
ins.executeInsert();
ins.clearBindings();
}
db.setTransactionSuccessful();
db.endTransaction();
c = db.rawQuery(
"select WORD, CNT from WORDS where SENT=0 group by WORD order by CNT desc limit 10",
null);
Cursor c2 = db.rawQuery(
"select WORD, CNT from WORDS where SENT=1 group by WORD order by CNT desc limit 10",
null);
最佳答案
db.execSQL("insert into WORDS values ('" + words[i] + "', "
+ from_me + ")");
数据库访问过多。为每个单词都敲击 DB 并不顺利。由于重复的单词较多,您可以将它们计入 Multiset 中。当内存紧张或完成时,将其与计数一起存储。
为每个事件创建单独的行也是没有意义的。添加一列count
(最好以不同的方式调用它,因为“count”是一个关键字)。
使用准备好的语句。通过每次创建一个查询字符串,您可以强制数据库一次又一次地解析它。并且还为 GC 生成工作。
words[i] = words[i].replaceAll("[^a-zA-z]", "");
使用Pattern.compile或CharMatcher 。后者在没有特殊字符的常见情况下不会产生垃圾。
private final CharMatcher alpha = CharMatcher.inRange('A', 'Z')
.or(CharMatcher.inRange('a', 'z')).precomputed();
alpha.retainFrom(words[i]);
这应该有很大帮助,尤其是数据库方面的东西。尝试一下,如果还不够的话再来。
关于java - 创建一个快速的 Android 词典(字数统计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25394873/
如何更改循环中变量的名称?比如 number1 、 number2 、 number3 、 number4 ? var array = [2,4,6,8] func ap ( number1: Int
我想设置 View 的背景颜色并在一定延迟后将其更改为另一种颜色。这是我的尝试方式: print("setting color 1") self.view.backgroundColor = UICo
我在使用 express-session 时遇到问题。 session 数据不会在请求之间持续存在。 正如您在下面的代码中看到的那样,/join 路由设置了一些 session 属性,但是当 /sur
我试图从叶渲染器获得一个非常简单的结果,用于快速 Steam 的 for 循环。 我正在上传叶文件 HTML,因为它不接受此处格式正确的代码 - 下面的pizza.swift代码- import
你们中有人有什么好的链接可以与我分享吗?我正在寻找一个 FAST 程序员编辑器,它可以非常快速地打开包含超过 100, 000 行代码的文件?我目前正在使用记事本自动取款机,打开一个 29000 行长
我现在正在处理眼动追踪数据,因此拥有一个巨大的数据集(想想数百万行),因此希望有一种快速的方法来完成此任务。这是它的简化版本。 数据告诉您眼睛在每个时间点正在查看的位置以及我们正在查看的每个文件。 X
我是新手,想为计时器或其他设备选择提示音。 如何打开此列表,以选择其中一种声音? Alert sound list 最佳答案 您将无法在应用中使用系统声音。 但是,您可以包括自己的声音文件,并将其显示
我编写了以下代码来构建具有顺序字符串的数组。 它的工作方式与我预期的一样,但我希望它能更快地运行。有没有更有效的方法在PowerShell中产生我想要的结果? 我是PowerShell的新手,非常感谢
我有一个包含一些非唯一行的矩阵,例如: x 尝试 y <- rle(apply(x, 1, paste, collapse = " ")) # y$lengths is the vector con
我的函数“keyboardWillShown”有问题。所以我想要的是菜单打开时,菜单正好出现在键盘上方。它可以在Iphone 8 plus,8、7、6上完美运行。但是,当我在模拟器上运行Iphone
我正在尝试通过Swift 5中的HTTP get方法从API提取数据。它在启动时成功加载了数据,但是当我刷新页面时,它说“索引超出范围”,这是因为数据是不再会在我的日志中读取,因此索引中没有任何内容。
我想做什么: 从我的数据库中获取时间戳并将其转换为用户的时区。 我的代码: let tryItNow = "\(model.timestampName)" let format = D
给定字体名称和字体大小,如何查找字符串的宽度(CGFloat)? (目标是将UIView的宽度设置为足以容纳字符串的宽度。) 我有两个字符串:一个重复“1”,重复36次,另一个重复“M”,重复36次。
我正在尝试解析此JSON ["Items": ( { AccountBalance = 0; AlphabetType = 3; Description = "\U0631\U
我在UINavigationBar内放置了一个UILabel。 我想根据navigationBar的高度增加该标签的字体大小。当navigationBar很大时,我希望字体大小更大;当滚动并缩小nav
我想将用户输入限制为仅有效数字并使用以下内容: func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, rep
目前我有一个包含超过 100.000 张图像的数据库,它们大小不一或类似,但我想为我的公司制作以下内容: 我插入/上传一张图片,系统返回最有可能相同的图片。我不知道使用什么算法,但它需要快速。我可以预
在我的 swift 项目中,我有一个按钮,我想在标签上打印按下该按钮的时间。 如何解决这个问题? 最佳答案 添加到DHEERAJ的答案中,您只需在func press(sender: UIButton
我必须发表评论,尝试在解析中导入数组。然而,有一个问题。 当我尝试从 Parse 加载数组时,我的输出是 ("Blah","Blah","Blah")这是一个元组...而不是一个数组 TT... 如何
我的应用程序有一个名为 MyDevice 的类,我用它来与硬件通信。该硬件是可选的,实例变量也是可选的: var theDevice:MyDevice = nil 然后,在应用程序中,我必须初始化设备
我是一名优秀的程序员,十分优秀!