前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >没有RDB也敢揽SQL活的开源金刚钻SPL

没有RDB也敢揽SQL活的开源金刚钻SPL

作者头像
IT咸鱼
发布于 2025-05-20 10:15:57
发布于 2025-05-20 10:15:57
9100
代码可运行
举报
运行总次数:0
代码可运行

SQL语法接近自然语言,上手学习门槛低,再加上先发优势的加成,很快就在数据库厂商和用户间流行开来。经过多年的发展,SQL已经成为应用最广、用户最多、最成熟的结构化数据计算语言。

但是,SQL必须基于RDB工作,而很多场景下并没有RDB,比如遇到csv\restful json\MongoDB等数据源,或进行这些数据源之间的混合计算,比如csv和xls之间。在这些场景下,很多人会选择用JAVA或C#等高级语言硬写算法,这要从头编写冗长的底层函数,执行效率也很难保证,很容易堆积出人人痛恨的“代码屎山”。也有人会把数据写入数据库,再用SQL进行计算,但入库的过程非常繁琐,实时性也很差,有时还要求助于ETL工具,架构重上加重,风险增了又增,遇到混合计算更是加倍的麻烦。

现在好了,集算器SPL来了,这些问题都可以轻松解决了。

SPL是开源的计算技术,完全覆盖了SQL的计算能力,支持种类繁多的数据源,没有RDB也可以用SQL进行结构化数据计算了。

完善的SQL计算能力

SPL提供了相当于SQL92标准的语法,可以进行足够丰富多样的数据计算,包括过滤、计算列、选择部分列、改名等等,可以直接把文本、xls等文件当成数据表来执行SQL。下面以csv文件作为数据源为例说明:

1. 过滤

基本的比较运算:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.csv whereAmount>=100

like:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.csv whereClientlike'%bro%'

空值判断:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.csv whereClientisnull

与、或、非这样的逻辑运算符可以把比较运算组合起来,实现组合过滤:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.csv wherenotAmount>=100andClientlike'bro'orOrderDate isnull

in:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.csv whereClientin('TAS','KBRO','PNS')

多层括号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.csv where(OrderDate<date('2020-01-01') andAmount<=100)or(OrderDate>=date('2020-12-31') andAmount>100)

2. 计算列

SPL有丰富的数学函数、字符串函数、日期函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectround(Amount,2), price*quantity fromd:/Orders.csv
$selectleft(Client,4) fromd:/Orders.csv
$selectyear(OrderDate) fromd:/Orders.csv

case when:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectcaseyear(OrderDate) when2021then'this year'when2020then'last year'else'previous years'endfromd:/Orders.csv

coalesce反显空值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectcoalesce(Client,'unknown') fromd:/Orders.csv

3. SELECT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectOrderId, Amount, OrderDate fromd:/Orders.csv

4. ORDER BY

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.csv orderbyClient, Amount desc

5. DISTINCT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectdistinctClient,Sellerid fromd:/Orders.csv

6. GROUP BY … HAVING

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectyear(OrderDate),Client,sum(Amount),count(1) fromd:/Orders.csv 
groupbyyear(OrderDate),Client
havingsum(Amount)<=100

聚合函数包括sum、count、avg、max、min,不分组也可以直接汇总:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectavg(Amount) fromd:/Orders.csv

7. JOIN

左关联:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selecto.OrderId,o.Client,e.Name e.Dept,e.EId fromd:/Orders.txt o 
leftjoind:/Employees.txt e ono.SellerId=e.Eid

右关联:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selecto.OrderId,o.Client,e.Name e.Dept,e.EId fromd:/Employees.txt e 
rightjoind:/Orders.txt o ono.SellerId=e.Eid

全关联:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selecto.OrderId,o.Client,e.Name e.Dept,e.EId fromd:/Employees.txt e 
fulljoind:/Orders.txt o ono.SellerId=e.EId

内关联:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selecto.OrderId,o.Client,e.Name e.Dept fromd:/Orders.csv o 
innerjoind:/Employees.csv e ono.SellerId=e.Eid

内关联还可以写成WHERE形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selecto.OrderId,o.Client,e.Name e.Dept fromd:/Orders.csv o ,d:/Employees.csv e 
whereo.SellerId=e.Eid

8. 子查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectt.Client, t.s, ct.Name, ct.address from
(selectClient,sum(amount) s fromd:/Orders.csv groupbyClient) t 
leftjoinClientTable ct ont.Client=ct.Client

with:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$witht as(selectClient,sum(amount) s fromd:/Orders.csv groupbyClient)
selectt.Client, t.s, ct.Name, ct.address fromt 
leftjoinClientTable ct ont.Client=ct.Client

In中的子查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.txt o  whereo.sellerid in(selecteid fromd:/Employees.txt)

9. AS

使用as关键字,可对字段、计算列、物理表、子查询改名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectprice*quantity assubtotal fromd:/detail.csv

10. 集合运算

union、union all、intersect、minus都有,举一例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Select* fromOrders1.csv
Unionall
Select* fromOrders2.csv

11. into输出结果

查询结果可用into关键字写入文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectdept,count(1) c,sum(salary) s intodeptResult.xlsx fromemployee.txt groupbydept havings>100000

丰富的数据源支持

SPL支持各种非数据库的数据源,包括各种非标准格式的文本,前面例子中已展示过csv。TAB分隔的txt也一样可以支持,SPL会根据扩展名自动处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.txt whereAmount>=100andClientlike'bro'orOrderDate isnull

如果分隔符不是逗号和tab,就要用SPL扩展函数处理了,比如分隔符是冒号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* from{file("d:/Orders.txt").import@t (;":")} 
whereAmount>=100and Client like 'bro'or OrderDate isnull

没有标题行的文件,可以用序号表示列名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* from{file("d:/Orders.txt").import()} where_4>=100and_2 like'bro'or_5 isnull

某些特殊格式的字符串也要用扩展函数解析,比如日期格式不是标准的yyyy-MM-dd:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selectyear(OrderDate),sum(Amount) from
{file("d:/Orders.txt").import@t (orderid,client,sellerid,amount,orderdate:date:"dd-MM-yyyy")}
groupbyyear(OrderDate)

Excel文件上也可以执行SQL,对于格式规范的Excel,只需直接引用文件名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* fromd:/Orders.xlsx whereAmount>=100andClientlike'bro'orOrderDate isnull

可以读取指定sheet:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* from{file("D:/Orders.xlsx").xlsimport@t (;"sheet3")} 
whereAmount>=100and Client like 'bro'or OrderDate isnull 

从远程网站下载来的csv/xls文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select * from {httpfile("http://127.0.0.1:6868/Orders.csv).import@tc() } 
where Amount>=100 and Client like 'bro' or OrderDate is null

HTTP协议的特性很多,比如字符集、端口号、post参数、header参数、登录认证等等,SPL扩展函数都可以支持。扩展函数还可以抓取网页中的表格数据,也支持从FTP服务器下载文件,这里不再赘述。

Json文件要先读为字符串再解析:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* from{json(file("d:\\data.json").read())} 
whereAmount>=100andClientlike'bro'orOrderDate isnull

二维Json比较少,多层才是常态,SPL扩展函数可以把多层数据转为二维记录,再用SQL计算,这里就不展开了。

Restful json

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* from{json(httpfile("http://127.0.0.1:6868/api/getData").read())}
whereAmount>=100andClientlike'bro'orOrderDate isnull

扩展函数如果比较多比较长,可以写成分步形式:

A

1

=httpfile("http://127.0.0.1:6868/api/getData")

2

=A1.read()

3

=json(A2)

4

$select * from {A3} where Amount>=100 and Client like 'bro' or OrderDate is null

类似csv/xls,SPL也可以读取HTTP网站上的json/xml文件。

XML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* from{xml(file("d:/data.xml").read(),"xml/row")}
whereAmount>=100andClientlike'bro'orOrderDate isnull

Web Service

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* 
from{ws_call(ws_client("http://。/entityWS.asmx?wsdl"),"entityWS ":" entityWSSoap":"getData")} 
whereAmount>=100andClientlike'bro'orOrderDate isnull

NoSQL也不在话下。

MongoDB

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* from
{mongo_shell@x (mongo_open("mongodb://127.0.0.1:27017/mongo"),"main.find()")}
whereAmount>=100andClientlike'bro'orOrderDate isnull

MongoDB经常是多层数据,包括前面的restful、web Service,用SPL扩展函数都可以转为二维。

Salesforce

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$select* from{sf_query(sf_open(),"/services/data/v51.0/query","Select Id,CaseNumber,Subject From Case where Status='New'")} whereAmount>=100andClientlike'bro'orOrderDate isnull

Hadoop HDFS上的csv/xls/json/xml:

A

1

=hdfs_open(;"hdfs://192.168.0.8:9000")

2

=hdfs_file(A1,"/user/Orders.csv":"GBK")

3

=A2.import@t()

4

=hdfs_close(A1)

5

$select Client,sum(Amount) from {A3} group by Client

HBase也支持:

A

1

=hbase_open("hdfs://192.168.0.8", "192.168.0.8")

2

=hbase_scan(A1,"Orders")

3

=hbase_close(A1)

4

$select Client,sum(Amount) from {A2} group by Client

Hbase还有filter、cmp等取数方式,SPL都可以支持。

Hive有公共的JDBC接口,但性能较差,SPL提供了高性能接口:

A

1

=hive_client("hdfs://192.168.0.8:9000","thrift://192.168.0.8:9083","hive","asus")

2

=hive_query(A1, "select * from table")

3

=hive_close()

4

$select Client,sum(Amount) from {A2} group by Client

Spark

A

1

=spark_client("hdfs://192.168.0.8:9000","thrift://192.168.0.8:9083","aa")

2

=spark_query(A1,"select * from tablename")

3

=spark_close(A1)

4

$select Client,sum(Amount) from {A2} group by Client

阿里云

A

1

=ali_open("http://test.ots.aliyuncs.com","LTAIXZNG5zzSPHTQ","sa","test")

2

=ali_query@x(A1,"test",["id1","id2"],[1,"10001"]:[10,"70001"], ["id1","id2","f1","f2"],f1>=2000.0)

3

$select Client,sum(Amount) from {A2} group by Client

Cassandra

A

1

=stax_open("127.0.0.1":9042,"mycasdb","cassandra":"cassandra")

2

=stax_query(A1,"select * from user where id=?",1)

3

=stax_close(A1)

4

$select Client,sum(Amount) from {A2} group by Client

ElasticSearch

A

1

=es_open("localhost:9200","user":"un1234")

2

=es_get(A1,"/person/_mget","{\"ids\":[\"1\",\"2\",\"5\"]}")

3

=es_close(A1)

4

$select Client,sum(Amount) from {A2} group by Client

Redis

A

1

=redis_open()

2

=redis_hscan(A1, "runoobkey", "v*", 3)

3

=redis_close (A1)

4

$select key,value from {A2} where value>=2000 and value<3000

SAP BW

A

1

=sap_open("userName","passWord","192.168.0.188","00","000",”E")

2

=sap_cursor(A1, "Z_TEST1","IT_ROOM").fetch()

3

=sap_close(A1)

4

$select * from {A2} where Vendor like '%software%'

InfluxDB

A

1

=influx_open("http://127.0.0.1:8086", "mydb", "autogen", "admin", "admin")

2

=influx_query(A1, "SELECT * FROM Orders")

3

=influx_close(A1)

4

$select Client,sum(Amount) from {A2} group by Client

Kafka

A

1

=kafka_open("D://kafka.properties";"topic-test")

2

=kafka_poll(A1)

3

=kafka_close (A1)

4

$select Client,sum(Amount) from {A2} group by Client

MDX多维数据库

A

1

=olap_open("http://192.168.0.178:8088/msmdpump.dll","CubeTest","Administrator","admin")

2

=olap_query(A1,"with member [Measures].[AnnualInterestRate] as'[Measures].[SalesAmount]/[Measures].[StandardCost]-1'select {[Measures].[SalesAmount],[Measures].[StandardCost],[Measures].[ AnnualInterestRate]} on columns, {[Order Date].[Calendar Year].[Calendar Year]} on rows from [DataSourceMulti]")

3

=olap_close(A1)

4

$select * from {A2} where SalesAmount>10000

SPL除了支持种类繁多的数据源,也可以进行数据源之间的混合计算。比如csv和RDB之间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selecto.OrderId,o.Client,e.Name e.Dept fromd:/Orders.csv o innerjoind:/Employees.xls e ono.SellerId=e.Eid

MongoDB和数据库之间:

A

B

1

=mongo_open("mongodb://127.0.0.1:27017/mongo")

2

=mongo_shell@x(A1,"detail.find()").fetch()

=connect("orcl").query@x("select * from main")

3

$select d.title, m.path,sum(d.amount) from {A2} as d left join {B2} as m on d.cat=m.cat group by d.title, m.path

任意数据源之间都可以进行混合计算,而且SQL语法不受数据源的影响。

更深入的计算能力

其实,SPL的本意是Structure Process Language,是一种专门用于结构化数据处理的语言,在前面的例子中也已经展示了部分SPL本身的语法(那些扩展函数)。SQL只是SPL顺带提供的一种功能, SPL本身还拥有比SQL更强大便捷的计算能力。有些计算逻辑比较复杂,用SQL甚至存储过程都很难写,而用SPL则可以用简单的代码完成计算。

比如这个任务,计算某支股票最长的连续上涨天数,SQL要用多层嵌套的子查询和窗口函数,代码冗长难懂:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
selectmax(continuousDays)-1
from(selectcount(*) continuousDays
from(selectsum(changeSign) over(orderbytradeDate) unRiseDays
from(selecttradeDate,
casewhenprice>lag(price) over(orderbytradeDate) then0else1endchangeSign
fromAAPL) )
groupbyunRiseDays)

而SPL只需两行:

A

B

1

=T("d:/AAPL.xlsx")

读Excel文件,首行为列名

2

=a=0,A1.max(a=if(price>price[-1],a+1,0))

求最长连续上涨天数

对于简单的运算,使用基本的SQL是很方便的,但运算需求变复杂时,SQL就不适用了,即使提供更多的功能(比如窗口函数)也不能简化计算。这种情况下,我们推荐用户直接使用代码简洁的SPL,而不必再写多层嵌套的复杂SQL了。基于这个原因,SPL中的SQL也只支持到SQL92标准,没有提供包括窗口函数在内的更多语法。

SQL不提倡多步骤计算,习惯于把一个计算任务写在一个大语句中,这样会加大任务的难度。而SPL则天生支持多步骤计算,可以将复杂的大计算目标方便地分解为简单的小目标,这会大大降低写代码的难度。比如,找出销售额累计占到一半的前n个大客户,并按销售额从大到小排列:

A

B

1

= T("D:/data/sales.csv").sort(amount:-1)

取数并逆序排序

2

=A1.cumulate(amount)

计算累计序列

3

=A2.m(-1)/2

最后的累计值即是总和

4

=A2.pselect(~>=A3)

超过一半的位置

5

=A1(to(A4))

按位置取值

灵活的应用结构

SPL该怎么用呢?

对于交互式的计算分析,SPL有专业的IDE,不仅具有完整的调试功能,还可以用表格直观观察每一步的中间结算结果:

SPL还支持命令行执行,任何主流操作系统都可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
D:\raqsoft64\esProc\bin>esprocx.exe -R select Client,sum(Amount) from d:/Orders.csv group by Client
Loglevel:INFO
ARO899.0
BDR4278.8
BON2564.4
BSF14394.0
CHO1174.0
CHOP1420.0
DYD1242.0

对于应用程序中的计算,SPL提供了标准的JDBC驱动,可以方便地集成进JAVA:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
…
Class.forName("com.esproc.jdbc.InternalDriver");
Connection conn =DriverManager.getConnection("jdbc:esproc:local://");
PrepareStatement st = conn.prepareStatement("$select* from employee.txt where SALARY >=? and SALARY<?");
st.setObject(1, 3000);
st.setObject(2, 5000);
ResultSet result=st.execute();
...

应用中会有些频繁修改或较为复杂的计算,SPL允许将代码外置于JAVA程序,可显著降低代码耦合性。比如上面的SPL代码可以先存为脚本文件,再在JAVA中以存储过程的形式调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
…
Class.forName("com.esproc.jdbc.InternalDriver");
Connectionconn =DriverManager.getConnection("jdbc:esproc:local://");
Statementst = connection.();
CallableStatementst = conn.prepareCall("{call getQuery(?, ?)}");
st.setObject(1,3000);
st.setObject(2,5000); 
ResultSetresult=st.execute();
...

有了SPL这样的开源神器,没有RDB也能轻松使用SQL了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【11408学习记录】考研英语强调句冲刺指南:必考结构精讲+高分写作妙句
强调句的写法很简单——将需要强调的部分放入强调句式it is …… that中间,其余部分放入that后。
蒙奇D索隆
2025/04/27
940
【11408学习记录】英语语法精讲:主从复合句核心解析与纪要写作实战指南 | 附每日一句长难句拆解
主语从句和宾语从句、表语从句一样,都是一个完整的句子在主句中充当主要成分。对应的语句结构为:
蒙奇D索隆
2025/04/10
1040
【11408学习记录】? 三步攻克英语长难句:嵌套结构×平行结构全解析
例如: The teacher believes that the student (who studied late at night because he wanted to pass the exam) wrote a brilliant essay (which was praised by the committee) when he had no time to sleep, and that the essay deserves an award.
蒙奇D索隆
2025/04/05
850
【11408学习记录】? 三步攻克英语长难句:嵌套结构×平行结构全解析
【11408学习记录】英语写作黄金模板+语法全解:用FTC数据泄漏案掌握书信结构与长难句拆解(附思维导图)
表明目的 The purpose of this letter/email is to...
蒙奇D索隆
2025/04/06
1400
特殊句型
It is Singapore that I want to go to this summer.(强调句)
Hongten
2022/11/21
5200
【11408】考研英语长难句攻克指南:三步断开+简化法,高效突破阅读理解
在一些长难句中,有时从句的连词会被省略,且没有标点将其隔开,此时就无法通过标点和连接词来断开长难句。那么我们只能够通过分析主谓来断开长难句。
蒙奇D索隆
2025/04/03
930
写给前端程序员的英文学习指南
达达前端技术社群:囊括前端Vue、JavaScript、数据结构与算法、实战演练、Node全栈一线技术,紧跟业界发展步伐,一个热爱前端的达达程序员。以下写给程序员的英文学习指南,每天看一遍。
达达前端
2020/10/10
1.1K0
写给前端程序员的英文学习指南
【11408学习记录】考研英语写作实战指南:2008年道歉信真题深度解析与高分模板
Directions: You have just come back from Canada and found a music CD in your luggage that you forgot to return to Bob, your landlord there. Write him a letter to
蒙奇D索隆
2025/05/11
470
【11408学习记录】从混乱到清晰:还原+断开+简化,彻底攻破英语分裂式长难句
分裂结构就是在句子中间插入了其他成分,或者把句中某些成分从原本的位置上移走,这样就分裂了原本连贯的句子。
蒙奇D索隆
2025/04/04
1220
【11408学习记录】从混乱到清晰:还原+断开+简化,彻底攻破英语分裂式长难句
【11408学习记录】英语语法精讲:主从复合句之状语从句全解析——以时间状语从句为例
这里的从属连词在句子中不做成分,但是表示一定的逻辑关系,用来说明这个状语从句是描述何种信息的。
蒙奇D索隆
2025/04/12
1210
【11408学习记录】考研英语写作提分神器:6个万能黄金句式+4类高频书信模板,速通建议信/通知/投诉信!
The schedule/details is/are attached for reference.
蒙奇D索隆
2025/04/29
980
详解英语中的不定代词之some、any、many、much、few、little、a few、a little、all、both、each、every、something、anything、nothi
不定代词是英语语法中的一个重要概念,它们不指代任何特定的人、事、物,而是具有泛指或不确定的含义。以下是对不定代词的详细说明,包括其定义、种类、用法及注意事项等方面。
jack.yang
2025/04/05
1540
第3节:特殊词精讲,分词,独立主格,动词的时态,动词的语态,句子的种类
regret to do 对要做的事遗憾 regret doing 对做过的事遗憾
达达前端
2019/07/03
4890
第3节:特殊词精讲,分词,独立主格,动词的时态,动词的语态,句子的种类
常用翻译技巧
英汉两种语言在句法、词汇、修辞等方面均存在着很大的差异,因此在进行英汉互译时必然会遇到很多困难,需要有一定的翻译技巧作指导。常用的翻译技巧有增译法、省译法、转换法、拆句法、合并法、正译法、反译法、倒置法、包孕法、插入法、重组法和综合法等,这些技巧均可用于口笔译中。 1增译法:指根据英汉两种语言不同的思维方式、语言习惯和表达方式,在翻译时增添一些词、短句或句子,以便更准确地表达出原文所包含的意义。这种方式多半用在汉译英里。汉语无主句较多,而英语句子一般都要有主语,所以在翻译汉语无主句的时候,除了少数可用英语无
张善友
2018/01/22
1.3K0
what、who、why、where、when、how等疑问代码的详解
基本疑问代词在英语中是一类非常重要的词汇,它们用于构建疑问句,帮助人们获取关于事物、人、地点、时间、原因和方式等方面的信息。以下是对基本疑问代词(what、who、why、where、when、how)的详细说明,涵盖其定义、用法、例句及在实际语境中的应用。
jack.yang
2025/04/05
1570
英文文法学习笔记(5)句子的要素及种类 1.1 词类1.2 片语及子句1.3 句子的要素1.4 句子的种类(由内容分)1.5 句子的种类(由结构分)2.1 词类2.2 片语及子句2.
本篇为第5篇笔记:句子的要素及种类。 一、经典例句 1.1 词类 1.2 片语及子句 1.3 句子的要素 1.4 句子的种类(由内容分) 1.5 句子的种类(由结构分)) 二、知识点回顾(对应例句编号) 2.1 词类 2.2 片语及子句 2.3 句子的要素 2.4 句子的种类(由内容分) 2.5 句子的种类(由结构分)) 三、例句中文翻译(参考) 3.1 词类 3.2 片语及子句 3.3 句子的要素 3.4 句子的种类(由内容分) 3.5 句子的种类(由结构分)) 一、经典例句 1. Congratulat
Alfred Zhao
2021/09/23
6540
自然语言处理之分词、命名主体识别、词性、语法分析-stanfordcorenlp-NER(二)
在前面我们介绍了Stanford CoreNLP, 自然语言处理之命名实体识别-tanfordcorenlp-NER(一)
学到老
2019/01/25
8.4K0
自然语言处理之分词、命名主体识别、词性、语法分析-stanfordcorenlp-NER(二)
Stanford CoreNLP工具使用
Stanford CoreNLP是使用Java开发的进行自然语言处理的工具。支持多种语言接口,Stanfordcorenlp是它的一个python接口。
伊泽瑞尔
2022/06/01
1.6K0
python︱六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP
THULAC 四款python中中文分词的尝试。尝试的有:jieba、SnowNLP(MIT)、pynlpir(大数据搜索挖掘实验室(北京市海量语言信息处理与云计算应用工程技术研究中心))、th
悟乙己
2018/01/02
12.4K0
python︱六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP
科学写作经验总结
本篇文章旨在简单总结关于科学论文写作的一些经验,文中的大部分观点来源于下面两份参考资料:
口仆
2020/08/14
7280
推荐阅读
【11408学习记录】考研英语强调句冲刺指南:必考结构精讲+高分写作妙句
940
【11408学习记录】英语语法精讲:主从复合句核心解析与纪要写作实战指南 | 附每日一句长难句拆解
1040
【11408学习记录】? 三步攻克英语长难句:嵌套结构×平行结构全解析
850
【11408学习记录】英语写作黄金模板+语法全解:用FTC数据泄漏案掌握书信结构与长难句拆解(附思维导图)
1400
特殊句型
5200
【11408】考研英语长难句攻克指南:三步断开+简化法,高效突破阅读理解
930
写给前端程序员的英文学习指南
1.1K0
【11408学习记录】考研英语写作实战指南:2008年道歉信真题深度解析与高分模板
470
【11408学习记录】从混乱到清晰:还原+断开+简化,彻底攻破英语分裂式长难句
1220
【11408学习记录】英语语法精讲:主从复合句之状语从句全解析——以时间状语从句为例
1210
【11408学习记录】考研英语写作提分神器:6个万能黄金句式+4类高频书信模板,速通建议信/通知/投诉信!
980
详解英语中的不定代词之some、any、many、much、few、little、a few、a little、all、both、each、every、something、anything、nothi
1540
第3节:特殊词精讲,分词,独立主格,动词的时态,动词的语态,句子的种类
4890
常用翻译技巧
1.3K0
what、who、why、where、when、how等疑问代码的详解
1570
英文文法学习笔记(5)句子的要素及种类 1.1 词类1.2 片语及子句1.3 句子的要素1.4 句子的种类(由内容分)1.5 句子的种类(由结构分)2.1 词类2.2 片语及子句2.
6540
自然语言处理之分词、命名主体识别、词性、语法分析-stanfordcorenlp-NER(二)
8.4K0
Stanford CoreNLP工具使用
1.6K0
python︱六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP
12.4K0
科学写作经验总结
7280
相关推荐
【11408学习记录】考研英语强调句冲刺指南:必考结构精讲+高分写作妙句
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档