我正在寻找允许文本"标准化"的java库.类似于标准的Normalizer,但更宽(类似于utf8proc LUMP).
它应该将所有类型的特殊字符替换为ASCII等效字符(如果可能的话).代码为32的所有空间变体,所有变量的缺陷(长,短,薄等)到代码45等等.
我的问题是关于非规范化.在数据库中,何时应将派生数据存储在自己的列中,而不是每次需要时都计算它?
例如,假设您有用户为他们的问题获得Upvotes.您在其个人资料中显示用户的声誉.当用户被投票时,您应该增加他们的声誉,还是应该在检索他们的个人资料时计算它:
SELECT User.id, COUNT(*) AS reputation FROM User
LEFT JOIN Question
ON Question.User_id = User.id
LEFT JOIN Upvote
ON Upvote.Question_id = Question.id
GROUP BY User.id
Run Code Online (Sandbox Code Playgroud)
在使用自己的列以增量方式跟踪它之前,查询获得用户声誉的处理器密集程度如何?
继续我们的例子,假设一个Upvote的权重取决于投射它的用户有多少Upvotes(而不是多少声誉).检索其声誉的查询突然爆炸:
SELECT
User.id AS User_id,
SUM(UpvoteWeight.weight) AS reputation
FROM User
LEFT JOIN Question
ON User.id = Question.User_id
LEFT JOIN (
SELECT
Upvote.Question_id,
COUNT(Upvote2.id)+1 AS weight
FROM Upvote
LEFT JOIN User
ON Upvote.User_id = User.id
LEFT JOIN Question
ON User.id = Question.User_id
LEFT JOIN Upvote AS Upvote2
ON
Question.id = Upvote2.Question_id
AND Upvote2.date < …Run Code Online (Sandbox Code Playgroud) 在PHP中是否存在用于URL规范化的预先存在的函数或类?
具体来说,遵循本维基百科关于URL规范化的文章中规定的语义保留规范化规则(或者我应该遵循的任何'标准').
现在,我想我只会使用parse_url(),并单独应用规则,但我宁愿避免重新发明轮子.
我想在Matlab中规范化矩阵的每一列.我试过两个实现:
选项A:
mx=max(x);
mn=min(x);
mmd=mx-mn;
for i=1:size(x,1)
xn(i,:)=((x(i,:)-mn+(mmd==0))./(mmd+(mmd==0)*2))*2-1;
end
Run Code Online (Sandbox Code Playgroud)
选项B:
mn=mean(x);
sdx=std(x);
for i=1:size(x,1)
xn(i,:)=(x(i,:)-mn)./(sdx+(sdx==0));
end
Run Code Online (Sandbox Code Playgroud)
但是,这些选项对我的数据花费了太多时间,例如5000x53矩阵上的3-4秒.那么,还有更好的解决方案吗?
我们假设我们有以下实体:
在这个简单的世界中,制作工作室有许多记者和许多摄影师.每个记者都属于一个工作室.运营商也是如此.一个新闻记者和一个操作员制作新闻片段,两个来自同一个工作室.
这是我将这个模型放入关系数据库的天真方法:
CREATE TABLE production_studios(
id SERIAL PRIMARY KEY,
title TEXT NOT NULL
);
CREATE TABLE journalists(
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
prodution_studio_id INTEGER NOT NULL REFERENCES production_studios
);
CREATE TABLE camera_operators(
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
production_studio_id INTEGER NOT NULL REFERENCES production_studios
);
CREATE TABLE news_footages(
id SERIAL PRIMARY KEY,
description TEXT NOT NULL,
journalist_id INTEGER NOT NULL REFERENCES journalists,
camera_operator_id INTEGER NOT NULL REFERENCES camera_operators
);
Run Code Online (Sandbox Code Playgroud)
这个模式形成了形状很好的钻石ERD和一些问题. …
我在JSFiddle的HTML中尝试了一些带有无序列表的代码,我对死亡感到恼火,因为发现<ul>没有明显原因的子弹会显示出来.在对我的代码尝试不同的事情时,我终于意识到我需要在jsfiddle页面上取消选中"normalized css"选项.
之后我用Google搜索了它实际上是什么,并从W3C.org 阅读了这个页面.这个页面只讨论变音符号和重音符号,我明白了.但为什么没有检查标准化css选项的子弹?如果选择该选项,会受到哪些其他影响?
谢谢你的关注.
假设我有一个主表,它有100列引用(作为外键)到100个表(包含主键).
整套信息需要加入这100张桌子.加入如此多的表肯定是一个性能问题.希望我们可以期望任何用户都希望在查询中请求包含来自不超过5-7个表(在这100个表中)中的值的一堆数据,这些查询将条件(在查询的WHERE部分中)放在大约3-4张桌子(其中100张).不同的查询有用于生产表的不同组合的"选择"查询的一部分,并把条件"WHERE".但是,同样,每个SELECT都需要5-7个表,每个WHERE都需要3-4个表(当然,用于生成SELECT的表列表可能与用于在WHERE中放置条件的表列表重叠).
我可以编写一个VIEW,底层代码加入所有这100个表.然后我可以将上面提到的SQL查询写到这个VIEW.但在这种情况下,对我来说如何指示SQL Server(尽管代码中的明确指令连接所有这100个表)只有大约11个表应该连接(11个表足以连接以生成SELECT)是一个很大的问题.结果并考虑到WHERE条件).
另一种方法可以是创建转换以下"假"代码的"特征"
SELECT field1, field2, field3 FROM TheFakeTable WHERE field1=12 and field4=5
Run Code Online (Sandbox Code Playgroud)
进入以下"真实"代码:
SELECT T1.field1, T2.field2, T3.field3 FROM TheRealMainTable
join T1 on ....
join T2 on ....
join T3 on ....
join T4 on ....
WHERE T1.field1=12 and T4.field4=5
Run Code Online (Sandbox Code Playgroud)
从语法的角度来看,即使允许这种"TheFakeTable-mechanism"与真实表格和结构的任何混合组合也不是问题.这里真正的问题是如何在技术上实现这个"特征".我可以创建一个函数,它将"假"代码作为输入并生成"真实"代码.但是,因为它需要使用动态SQL工具evrywhere其中这个"TheFakeTable机制"似乎也不是很方便.幻想土地解决方案是在我的Management Studio中扩展SQL语言的语法,以允许编写这样的假代码,然后在发送到服务器之前自动将此代码转换为真实代码.
我的问题是:
感谢大家的每一条评论!
PS具有100个表格的结构来自我在这里提出的以下问题: 规范化一个非常大的表格
我有一个使用关系数据库(MySQL)的Web应用程序.我们正在添加一项新功能,允许某些用户从可选表单元素池中动态构建"表单",并将这些表单分发给其他用户以完成/提交.
问题在于存储完成的表单提交.每个表单可以并且将在表单元素的数量和组合方面有所不同,并且对于关系数据库,我的选项在某种程度上局限于动态创建一个新表来保存每个表单的提交(似乎是一个坏的路径)或存储每个提交的表单都作为TEXT列中的JSON(丢失了所有有用的RDBMS查询功能)
我以前从未在生产项目中实际使用MongoDB,但我认为使用我的MySQL关系数据库存储我的应用程序的某些用户创建的所有表单,然后存储所有提交的内容可能是个好主意. MongoDB,每个文档引用MySQL中表单的UUID.
我用这种方法可以想到的第一个缺点是表单提交和MySQL中的表单之间没有引用完整性.如果我在MySQL中删除一个表单,则必须手动删除所有表单提交(如果我想复制'Cascade'效果)
我是否会将单个MongoDB集合中所有表单的所有表单提交存储为单独的文档?任何意见是极大的赞赏.:)
编辑1 基于此处的文档:http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections
我现在正在考虑创建一个新的集合来保存每个独特表单类型的所有提交.
编辑2
经过一些仔细考虑和其他人的建议后,我决定放弃我的双数据库方法来解决这个问题,转而采用关系数据库模式,我认为这解决了创建动态表单和保存表单提交的问题.他们很容易查询复杂报告的方式.

基本上,"表单"中的每个记录都代表一个由用户构建的唯一表单.'forms_fields'有一个引用表单的外键和一个带有选项的枚举类型:1.复选框2. textfield 3. textarea 4.选择5.多选6.日期
'forms_fields_options'包含选择字段所具有的所有'选项'.通过这三个表,用户可以创建自定义表单.
当另一个用户填写并提交表单时,会在forms_submissions中创建一条记录.对于每个字段,将在'forms_submissions_fields'中创建相应的记录,该记录引用表单提交和forms_fields_id.最终表'forms_submissions_options_multiselect'本质上是一个连接表,用于指示用户选择的多选表单字段中的哪些选项.
我想将英语(i)的"I"的小写字母与土耳其语(i)的"İ"的小写字母相匹配.它们是相同的字形,但它们不匹配.当我做System.out.println("?".toLowerCase());字符i和打印点(此网站不能正确显示)
有没有办法匹配那些?(最好没有硬编码)我想让程序匹配与语言和utf代码无关的相同字形.这可能吗?
我测试了规范化没有成功.
public static void main(String... a) {
String iTurkish = "\u0130";//"?";
String iEnglish = "I";
prin(iTurkish);
prin(iEnglish);
}
private static void prin(String s) {
System.out.print(s);
System.out.print(" - Normalized : " + Normalizer.normalize(s, Normalizer.Form.NFD));
System.out.print(" - lower case: " + s.toLowerCase());
System.out.print(" - Lower case Normalized : " + Normalizer.normalize(s.toLowerCase(), Normalizer.Form.NFD));
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
结果未在网站中正确显示,但第一行(iTurkish)仍然具有? 接近小写的i.
目的和问题
这将是一个多语言词典.我希望程序能够识别"İFEL"以"if"开头.为了确保它们不区分大小写,我首先将两个文本转换为小写.İFEL成为i(点)fel并且"if"未被识别为其中的一部分
我有类似以下的数据:
[
[0, 4, 15]
[0, 3, 7]
[1, 5, 9]
[2, 4, 15]
]
Run Code Online (Sandbox Code Playgroud)
我用oneHotEncoder http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder.fit_transform预处理这个数据,所以它适合线性回归给我这个:
[
[1, 0, 0, 4, 15]
[1, 0, 0, 3, 7]
[0, 1, 0, 5, 9]
[0, 0, 1, 4, 15]
]
Run Code Online (Sandbox Code Playgroud)
但是,我希望将这些数据标准化.
到目前为止,我只是将数据规范化,如下所示:
preprocessing.normalize(data)
Run Code Online (Sandbox Code Playgroud)
但是,这会将所有列(包括类别列)标准化.
我的问题如下:
谢谢!