ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

TSL 文本抓取语言

Dan Borufka ST3

基于 Python 的文本抓取语言(伪代码风格)

详细信息

安装次数

  • 总计 167
  • Win 100
  • Mac 43
  • Linux 24
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
Mac 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

自述文件

源代码
raw.​githubusercontent.​com

TSL – 文本抓取语言

Sublime Text 插件,用于处理伪代码风格的抓取语言

TSL Sublime Text 软件包允许您用伪代码风格的语言编写和执行代码来处理文本文件,使用正则表达式和简单逻辑。这使得非程序员也能够轻松地进入数据挖掘领域。

一旦将文件放在 Sublime Text 的 包目录 中,具有 .tsl 扩展名的文件将自动获得 语法高亮 和一个 构建系统 来运行它们。通过在 ST3 菜单中选择 工具 > 构建系统 > TSL 来强制构建。

示例

Sublime Text Syntax Highlighting

… 这将读取 stats/milestones.csv 中的所有行,将这些行分割成列,选择第二列,并将相应的行保存到用该列命名的文件中(例如 stats/31-03-2019.txt)。


索引

它是如何工作的?

设置

可用的 TSL 命令

模板化


它是如何工作的?

TSL 会逐行执行脚本,并在后台执行相应的 Python 代码。文件处理、复杂数据类型和模板化是内置的,以实现快速原型设计。每一行都由一个命令后跟一个空格以及空格分隔的参数组成。大多数命令支持类似 as ...(存储变量)或 in ...(文件句柄)的可选子句,以提供更多信息。

数据类型

命令的输入和输出可以是 字符串字符串集合。在迭代情况下,TSL 对集合中的每个字符串应用命令。以下命令(asremembersplitfor every)将上下文更改为提供的变量。这意味着您可以在以下命令中省略 as 子句,始终自动引用上下文。要引用变量而不是字符串,请使用方括号。`log something` 将记录字符串“something”,而 `log [something]` 将记录名为 something 的变量内容。

循环

for every 循环内部工作时,TSL 自动使用您变量的单数形式遍历集合的条目。

示例

in /contacts/childnames.txt
    take lines as children
    log [children]
    for every [child]
        split by tab
        select 2nd as first-name
    ---
    log [first-names]

在循环过程中创建的变量将自动附加到使用复数形式命名的集合中。在上面的示例中,first-name 的创建将自动填充名为 first-names 的集合。不规则复数(如 child -> children 或 foot -> feet)具有基本支持。如果复数不适用,请尝试更好的词形变化,例如使用 `species-collection` 代替 `species`。


设置

将 TSL 文件夹放入 %USERPROFILE%/AppData/Roaming/Sublime Text 3/Packages 以安装插件。


可用的 TSL 命令

文件和系统操作

bash <command> as <variable>

执行 bash 命令并将返回的输出保存到变量中。

示例

bash git branch as branches

empty [<filepath>]

打开文件并删除其全部内容。

示例

in wordbag.txt
        empty

in <path/to/textfile.txt>

打开文件并读取所有行。您可以使用 log line 记录这些行。所有后续文件操作都引用此文件,直到下一个“in”语句。您通常会看到此命令之后紧跟一个 takefind all 命令。

示例

in stats/01092019.txt

in <path/to/folder>

如果不存在,将创建嵌套目录结构。否则,该路径将用于未来操作的上下文。

示例

in "/Sublime Text/Packages"
        count files as fileCount
        log [fileCount]

save [as <filepath>]

将最新集合保存到指定的文件名中。

示例

save as runner/cleaned_userinputs.txt

write [<variable>]

将给定的变量(或最后 find all 的结果)写入使用 in 打开的最后一个文件。

示例

write [userIds]

add *<string | variable>* [to <filepath>]

将内容追加到当前未打开的文件中。

示例

add [libraries] to libs.txt

选择

select th [of [input]]

选择集合中的特定项目,给定其索引。

示例

in bigrams.txt   
        select 4th

select words [of [input]][as <output>]

选择在最后一个打开的文件中找到的所有单词。

示例

in utterances.txt    
        select words

select [from <string | RegEx | int>*] [to *<string | RegEx | int>]

选择从指示的字符串/正则表达式/数字到指示的字符串/正则表达式/数字的范围。注意,我们从 1 开始计数以保持自然顺序。

示例

select from "{" to "}"
    select from \s to \s
    select from 1 to ";"
    select two of [bigrams]

select from <string | RegEx | integer>

选择从指定字符串/正则表达式/数字到行尾的范围。

***示例:***

select from "dateTime"
    select from \d\d\d
    select from 122

select to <string | RegEx | integer>

选择从行首到指定字符串/正则表达式/数字的范围。

示例

select to "dateTime"
    select to \W
    select to 5th  
    select to 370

调试和计算

be <property>

以下可以设置 TSL 的以下属性为 true

verbose | active

calculate operation as <variable>

计算数学运算。

示例

calculate (5 * 4) / 2 as ratio

log <variable | string>

输出到控制台。对于变量,请使用带模板标记的字符串(例如:“here is: [varName]”)。

count <variable> as <countVariable>

存储选择中的行数。

示例

count [entries-per-day] as frequency
    log [frequency]

count *<files | folders>* in <path/to/dir> as <countVariable>

存储目录中的文件或文件夹数量。

示例

count files in "C:\Windows" as systemFiles
    log "Exactly [systemFiles] system files found."

操作

change <varName> to <formula>

遍历一个集合,并根据模板标签更改所有条目。使用括号标记变量,例如:[varName]

示例

change [salute] to "Hi, [salute] #[i]"

例如,将“我的名字是Dan”更改为“Hi,我的名字是Dan #1”

<setName><setName>结合作为<varName>

合并两个集合并存储在新变量中。

示例

combine [vowels] with [consonants] as letters

<varName>中查找 *<string | RegEx>* [作为 <varName>]

查找当前打开文件或存储的集合中的字符串或正则表达式的所有出现。此搜索的结果将自动存储在变量 found

示例

in corpus_de.txt
        take lines as utterances
        find all [aeiou]+ in [utterances]
        log [found]

删除行

删除最后选择的行(例如,使用 find all 找到的行)

将 *<string | RegEx>* 替换为 <string> [在 <variable> 中]

使用另一个字符串替换给定的字符串或正则表达式,可选地在特定集合中。

示例

replace \W+ by "_"

排序 [<varName>]

按字典顺序(升序)对提供的或最后引用的集合进行排序。

排序 [<varName>] 按照顺序 [<reference>]

对提供的集合按参考集合的字典顺序(升序)进行排序。

<delimiter><string|RegEx> 分割为 <variable>

使用分隔符将字符串分割成集合。分隔符可以是任意字符的组合或以下关键字之一:括号、逗号、点、连字符、行、括号、点、分号、空格、制表符、下划线。

示例

split apples;bananas;oranges by semicolons as fruits
    log [fruits]

unique [<varName>]

从给定集合中删除所有重复条目。

unique lines

从最后引用的集合中删除所有重复行。

内存

<string | variable> 记忆为 <variableName>

将字符串或变量存储在新变量中。

take *<lines | results | files | folders>* [as <name>]

将选定的集合更改为整个行(take lines as ...)、find all 指令的结果,或更改先前与 in <folderPath> 指令指定的文件夹中找到的文件。

示例

in source.txt
        find all <[^>]+>
        take lines as htmlLines
        log [htmlLines]

    in libraries/de
        take files as germanLibs
        log [germanLibs]

流程

for every <variable>

循环遍历集合,变量 i 满足当前索引。在这里使用单数形式来遍历集合(books -> book,babies -> baby)。

如果集合为空,for 循环将被跳过。这有助于创建条件流程。

总是使用三连字符在单独的一行中结束循环。

示例

in corpus.txt
        find all [^\b]+\b[^\b]+ as bigrams
        for every [bigram]
            log "#[i]: [bigram]"
        ---

run path/to/script.tsl

运行另一个 TSL 文件

外部 TSL 文件将接收与内联代码相同的范围。


模板化

模板用方括号括起来,可以出现在引号字符串、文件路径中,甚至正则表达式内。

{
    in stats/milestones.tsv
        take lines as rows

        for every [row]
            split by tabs as column
            select second as team-name
            select 3rd as task

            find all [team-name]\:(.*) in [task]
            take results

            in "stats/[team-name].txt"
                write [task]
        ---
}

如果找不到变量,模板标签将保持不变,包括方括号。这使得我们可以轻松地将它们与正则表达式混合。