2019年5月

介绍

Python 与 PHP 都是广泛使用的语言,各有所长,让人期待两者结合可以实现更丰富的效果。

在 PHP 中调用 Python 实现某些处理,这种需求虽然比较小众,还是实用的。目前网上可以查到很多资料仍在探讨 exec()(也包括 system()shell_exec()passthru() 等)执行外部的 Python 文件,但这只是一种通用的方式,调用成本比较高,在每次调用时,需要装载整个 Python 解释环境。

有此类需求的开发者非常适合看一下 PPython,这是一种从根本上将 PHP 与 Python 有效结合的技术。

PPython 最初见于 https://code.google.com/p/ppython,该作者将 lajp(一种 PHP 结合 Java 的技术)移植到了 Python 上。

该项目最初建立于 2012 年,而且似乎已经停止维护多年,不过目前来看其思路及效果还是值得肯定的,因此将此项目从停止运营的 Google Code 上迁移到了 GitHub,并遵循原 Apache 许可证重新发布和维护。

日前笔者对此作了一番尝试,对 PPython 的方便易用有所体会。

原理与架构

PHP 与 Python 通讯有两种不同的套接字机制:TCP 套接字和 UNIX 套接字。UNIX 套接字是 Unix/Linux 本地套接字,相对于 TCP 套接字,具有以下特点:

  • 只能在同一台主机中通讯(IPC),不能跨主机;
  • 传输速度大于 TCP 套接字;
  • 服务端只向本机提供服务(没有对外侦听端口),相对安全,易于管理。

PHP 和 Python 各有其语言内部定义的数据类型,通常 PHP 进程与 Python 进程进行数据交互时,需要进行转码处理。此类转换如由应用自行实现,从开发效率到运行性能都会增加不少额外负担。

PPython 对 PHP 和 Python 间的通讯方式的处理支持 TCP 套接字和 UNIX 套接字两种机制,兼顾通讯效率和分布式,转码由服务统一处理,Python 为 PHP 的数据类型提供格式兼容,使 PHP 端开发无须为底层通讯担心。

Python 因其语言 GIL 特性,同一进程内多线程效率不高。PPython 可根据项目需要部署服务,多进程运行 Python,提高应用综合性能。

使用方法

PPython 的代码可从上述项目仓库中下载。

下载得到的文件中,以下三个是 PPython 的核心代码,作用如下:

  • php_python.py,Python 进程主文件,完成 Python 端监听请求并运行返回
  • process.py,Python 端核心类,实现 Python 内部进程调用及 PHP 与 Python 数据结构转化等关键处理
  • php_python.php,PPython 客户端,PHP 端引用此文件,可直接使用 PPython 函数实现调用。

将以上文件放置到任意目录。先修改准备运行 PPython 的端口,监听端口不限,只要 php_python.pyphp_python.php 两端修改一致。笔者统一改为 10240。

在当前目录下运行 php_python.py,只要 Python 环境正常,便将运行起一个 PPython 的服务。

-------------------------------------------
- PPython Service
- Time: 2019-05-13 22:24:09
-------------------------------------------
Listen port: 10240
charset: utf-8
Server startup...

PHP 端引入 php_python.php,就可以用 ppython 函数与之前启动的 PPython 服务通讯,传入请求由 PPython 服务调用 Python 处理后返回结果,如 $res = ppython('test::go') 是调用test.py 中的 go 函数,也可加上更多参数,第二个参数起将为被调的函数传递更多参数。

php_python.py 是 PPython 启动后直接运行的全局代码,有全局配置或进程启动后的通用处理都写在这里,如原生代码中建立了数据库连接等,项目中应视情况作优化。

但 Python 令人感兴趣的主要方面不只是像 PHP 那样描述业务功能,它可以在人工智能等领域所需要的计算型任务提供对更复杂的数据结构的处理,因此二者的结合可以给 PHP 带来更多应用场景。

改进

此外,原生的 php_python.py 还有些不足。笔者用 ppython 调用自定义代码中遇到了三个问题,并相应做了解决:

  1. 不支持 complex(复数类),复数是数学上的一种数据类型,主要包括 real(实部)和 imag(虚部)数据,虽然日常生活中遇到较少,但 AI 和各种专业研究领域或并不罕见。Python 里有 complex 类,对复数可以直接进行各种计算,但 PPython 序列化和反序列化对 complex 没有处理。为了能让 complex 包括的数据能正常返回,只要在 process.pyz_encode() 方法中加上符合 PHP 要求的序列化处理,代码如下:
elif isinstance(p, numpy.complex128):
    t1 = str(p.real)
    t2 = str(p.imag)
    return 'O:7:"complex":2:{s:4:"real";d:%s;s:4:"imag";d:%s;}' % (t1,t2)
  1. 不支持 ndarray(多维数组)。相比 complexndarray 要普通得多,相信凡使用到 Python 的各种计算功能,ndarray 是无法回避的,甚至 ndarray 在一定程度上成就了 Python。但原 php_python.py 不能识别 ndarray。不过解决起来并不难,在 process.py 里找到z_encode() 方法,加上下面这段,可以直接将 ndarray 转化为符合 PHP 要求的数组(数字索引)。
    elif isinstance(p, numpy.ndarray):
        s = ''
        i = 0
        for d in p:
            s += 'i:%d;%s' % (i,z_encode(d))
            i += 1
        return "a:%d:{%s}" % (len(p),s)
  1. 原代码不太稳健,如数据为 ndarray 类型,if p == None:报错ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all(),因为p == None的结果也是ndarray,不返回false ,将判断方法改为if p is None:可避免出错。

相应地 PHP 端也要注意一下序列化和反序列化的处理。

处理回复中类似 complex 这样的对象数据时,如系统中没有定义相应的类,PHP 是可以反序列化的,但将显示为 “incomplete object”,vardump 看得到 realimag 数据,但不能直接操作,自行定义 complex 类后,则按指定的类进行解析,与 PHP 内的一般对象无异,可以轻松进行所有操作。

至此,PHP 与 Python 的功能调讯已无问题。

补充:注册为服务

命令行下启动 php_python.py 主要是方便调试,可以看到观察反馈信息等,生产环境中手工启动 PPython 毕竟不太方便。可以将 PPython 配置成服务,修改端口也可以为不同的应用配置不同的 PPython 端。

Linux 下将一个进程注册为服务很简单,只要建立 /usr/lib/systemd/system/ppython.service,内容如下:

[Unit]
Description=PHP-Python Service
After=network.target remote-fs.target nss-lookup.target
 
[Service]
ExecStart={PPYTHON_PATH}/php_python.py

[Install]
WantedBy=multi-user.target

其中 {PPYTHON_PATH} 要改成实际路径。

总结

有了 PPython,可以摒弃 exec() 这种 shell 调用,使开发回归到逻辑本身。

个人认为该方案值得所有对 PHP 和 Python 都感兴趣的开发人员了解,也欢迎大家参与和贡献这个项目

不能在 Linux 中提取 .7z 文件?学习如何在 Ubuntu 和其他 Linux 发行版中安装和使用 7zip。

7Zip(更适当的写法是 7-Zip)是一种在 Windows 用户中广泛流行的归档格式。一个 7Zip 归档文件通常以 .7z 扩展结尾。它大部分是开源的,除了包含一些少量解压 rar 文件的代码。

默认大多数 Linux 发行版不支持 7Zip。如果你试图提取它,你会看见这个错误:

不能打开这种文件类型

没有已安装的适用 7-zip 归档文件的命令。你想搜索一个命令来打开这个文件吗?

不要担心,你可以轻松的在 Ubuntu 和其他 Linux 发行版中安装 7zip。

一个问题是你会注意到如果你试图用 apt-get install 命令,你会发现没有以 7zip 开头的候选安装。因为在 Linux 中 7Zip 包的名字是 p7zip。以字母 “p” 开头而不是预期的数字 “7”。

让我们看一下如何在 Ubuntu 和其他 Linux 发行版中安装 7zip。

在 Ubuntu Linux 中安装 7Zip

你需要做的第一件事是安装 p7zip 包。你会在 Ubuntu 中发现 3 个包:p7zip、p7zip-full 和 pzip-rar。

pzip 和 p7zip-full 的不同是 pzip 是一个轻量级的版本,仅仅对 .7z 文件提供支持,而 p7zip-full 提供了更多的 7z 压缩算法(例如音频文件)。

p7zip-rar 包在 7z 中提供了对 RAR 文件 的支持

在大多数情况下安装 p7zip-full 就足够了,但是你可能想安装 p7zip-rar 来支持 rar 文件的解压。

p7zip 包在 Ubuntu 的 universe 仓库 因此保证你可以使用以下命令:

sudo add-apt-repository universe
sudo apt update

在 Ubuntu 和基于 Debian 的发行版中使用以下命令。

sudo apt install p7zip-full p7zip-rar

这很好。现在在你的系统就有了 7zip 归档的支持。

在 Linux 中提取 7Zip 归档文件

安装了 7Zip 后,在 Linux 中,你可以在图形用户界面或者 命令行中提取 7zip 文件。

在图形用户界面,你可以像提取其他压缩文件一样提取 .7z 文件。右击文件来提取它。

在终端中,你可以使用下列命令提取 .7z 归档文件:

7z e file.7z

在 Linux 中压缩文件为 7zip 归档格式

你可以在图形界面压缩文件为 7zip 归档格式。简单的在文件或目录上右击,选择“压缩”。你应该看到几种类型的文件格式选项。选择 .7z。

7zip Archive Ubuntu

作为替换,你也可以在命令行中使用。这里是你可以用来压缩的命令:

7z a 输出的文件名 要压缩的文件

默认,归档文件有 .7z 扩展。你可以通过在指定输出文件扩展名为 .zip 以压缩为 zip 格式。

总结

就是这样。看,在 Linux 中使用 7zip 多简单?我希望你喜欢这个快速指南。如果你有问题或者建议,请随意在下方评论让我知道。


via: https://itsfoss.com/use-7zip-ubuntu-linux/

作者:Abhishek Prakash 选题:lujun9972 译者:warmfrog 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Fedora 30 已经发布了。你可能希望将系统升级到最新版本的 Fedora。Fedora 工作站版本有图形化升级的方法。另外,Fedora 也提供了一个命令行方法,用于将 Fedora 29 升级到 Fedora 30。

将 Fedora 29 工作站版本升级到 Fedora 30

在发布不久后,桌面会显示一条通知告诉你可以升级。你可以单击通知启动 “GNOME 软件” 应用。或者你可以从 GNOME Shell 中选择“软件”。

在 “GNOME 软件” 中选择更新选项卡,你会看到一个页面通知你可以更新 Fedora 30。

如果你在屏幕上看不到任何内容,请尝试点击左上角的重新加载按钮。发布后,所有系统都可能需要一段时间才能看到可用的升级。

选择“下载”获取升级包。你可以继续做其他的事直到下载完成。然后使用 “GNOME 软件” 重启系统并应用升级。升级需要时间,因此你可以喝杯咖啡,稍后再回来。

使用命令行

如果你过去升级过 Fedora 版本,你可能熟悉 dnf upgrade 插件。这是从 Fedora 29 升级到 Fedora 30 的推荐和支持的方式。使用这个插件将使你的 Fedora 30 升级简单易行。

1、更新软件并备份系统

在你执行任何操作之前,你需要确保在开始升级之前拥有 Fedora 29 的最新软件。要更新软件,请使用 “GNOME 软件” 或在终端中输入以下命令。

sudo dnf upgrade --refresh

此外,请确保在继续之前备份系统。关于备份的帮助,请参阅 Fedora Magazine 上的备份系列

2、安装 DNF 插件

接下来,打开终端并输入以下命令来安装插件:

sudo dnf install dnf-plugin-system-upgrade

3、使用 DNF 开始更新

现在你的系统是最新的,完成了备份,并且已安装 DNF 插件,你可以在终端中使用以下命令开始升级:

sudo dnf system-upgrade download --releasever=30

此命令将开始在本地下载所有升级文件以准备升级。如果你因为没有更新包、错误的依赖,或过时的包在升级时遇到问题,请在输入上面的命令时添加 -- allowerasing 标志。这将允许 DNF 删除可能阻止系统升级的软件包。

4、重启并升级

当前面的命令完成下载所有升级文件后,你的系统就可以重启了。要将系统引导至升级过程,请在终端中输入以下命令:

sudo dnf system-upgrade reboot

此后你的系统将重启。在许多版本之前,fedup 工具将在内核选择/引导页面上创建一个新选项。使用 dnf-plugin-system-upgrade 包,你的系统将使用当前 Fedora 29 安装的内核重启。这个是正常的。在内核选择页面后不久,系统开始升级过程。

现在可以休息一下了!完成后你的系统将重启,你就可以登录新升级的 Fedora 30 了。

解决升级问题

升级系统时偶尔可能会出现意外问题。如果你遇到任何问题,请访问 DNF 系统升级的维基页面,以获取有关出现问题时的故障排除的更多信息。

如果你在升级时遇到问题并在系统上安装了第三方仓库,那么可能需要在升级时禁用这些仓库。有关 Fedora 对未提供仓库的支持,请与仓库的提供商联系。


via: https://fedoramagazine.org/upgrading-fedora-29-to-fedora-30/

作者:Ryan Lerch 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

手机 APP(应用程序)过度索权、注销难等导致个人信息“裸奔”的现象,近年来屡屡被曝光并引发关注。针对手机APP违法违规收集和使用个人信息问题,有关部门连出重拳。今年,中央网信办、工信部、公安部、市场监管总局等四部门开展专项治理行动,向违法违规手机APP“开刀”。

手机APP的哪些伎俩属于违法违规收集个人信息?根据国家网信办官网消息,《APP违法违规收集使用个人信息行为认定方法(征求意见稿)》(以下简称《征求意见稿》)近日公开征求社会意见,对相关行为给出了较为明确的界定。

7 种 APP 情形被认定为违法违规

根据《征求意见稿》,APP违法违规收集使用个人信息共有7种情形,包括没有公开收集使用规则;没有明示收集使用个人信息的目的、方式和范围;未经同意收集使用个人信息;违反必要性原则收集与其提供的服务无关的个人信息;未经同意向他人提供个人信息;未按法律规定提供删除或更正个人信息功能;侵犯未成年人在网络空间合法权益。

针对上述7种情形,《征求意见稿》有进一步的详细规定。例如,APP没有隐私政策、用户协议,在安装、使用等过程中均未通过弹窗、链接等方式提示用户阅读隐私政策,进入APP主功能界面后,多于4次点击、滑动才能访问到隐私政策等,都算作违法违规行为。

业内人士指出,《征求意见稿》的制定和公开征求意见,标志着APP违法违规专项治理行动又向前迈进了一步。这一规定既为手机APP运营者自查自纠提供了指引,也为有关监管部门评估和处置违法违规APP提供了参考,内容更加细化,同时切中了专项治理过程中的突出问题,有利于行业的有序发展,也利于公民的个人隐私得到更完善的保护。

“强制授权”等将受到严厉处罚

针对用户“吐槽”已久的一些违法违规情形,《征求意见稿》作出了明确的认定。例如,一些APP仅以改善程序功能、提高用户体验为由,收集用户个人信息;不少APP在申请调阅通讯录等权限时,未告知用户收集使用的目的;很多APP收集使用规则的内容晦涩难懂、长如“天书”;一些APP利用个人信息定向推送新闻、广告,却不提供终止推送的选项……以上这些行为,都被认定为违法违规。

与此同时,强制授权、过度索权、超范围收集、注销难等诸多行为都有明确的认定规则,如收集与现有业务无关的个人信息、收集频率等超出业务功能需要,未提供更正、删除个人信息和注销用户账号功能等。

中央网信办网络安全协调局巡视员兼副局长杨春艳表示,对于存在的问题和消费者反映强烈的问题,APP监管部门将重拳出击。对强制、过度收集个人信息,未经消费者同意、违反法律法规规定和双方约定收集、使用个人信息,发生或可能发生信息泄露、丢失而未采取补救措施,非法出售、非法向他人提供个人信息等行为,按照《网络安全法》《消费者权益保护法》等依法予以处罚。公安机关开展打击整治网络侵犯公民个人信息违法犯罪专项工作,依法严厉打击针对和利用个人信息的违法犯罪行为。

彻底打破滥取用户信息的潜规则

据悉,自APP违法违规收集使用个人信息专项治理工作组成立以来,至今年4月上旬,举报信息已近3500条,涉及1300余款APP。其中,对于30款用户量大、问题严重的APP,工作组已向其运营者发出了整改通知。

移动安全专家田铭表示,在大数据时代,一些互联网企业将手机APP用户视为重要资源,过度、过量索取用户隐私已成潜规则。企业获取的消费者信息越多,能绘制的消费者画像就越精准,从而达到流量变现的目的。

而获取消费者信息后,企业的数据保存和利用也存在安全隐患。一些企业的数据库缺乏有力的安全防护,在遭遇网络攻击时容易造成用户数据泄露。因此,专家指出,在认定方法最终出台后,要让相关规范在行业中得到严格执行,还需要一个循序渐进的过程。应通过技术性、长效性的个人信息保护解决方案,从源头上规范APP运营商的研发和推广,有效解决APP违规违法使用个人信息问题。

有APP运营者表示,运营团队十分关注认定方法的提出,也正在按照法律法规要求进行自查自纠。未来,将根据《征求意见稿》的进展做好合规准备,及时按照规定的要求查漏补缺,保护好用户的个人信息安全。

来源:人民日报海外版

更多资讯

Facebook 起诉韩国数据分析公司 欲重塑公司隐私形象

据外媒 Gizmodo 报道,在韩国数据分析公司 Rankwave 未能提供证据证明其遵守 Facebook 的数据政策之后,Facebook 已对该公司提起诉讼,指控 Rankwave 违反合同约定。

来源: 新浪科技

详情: http://t.cn/EK5nKxs

报道称与俄罗斯有关的社交媒体账户正在传播针对欧盟选举的虚假信息

据《纽约时报》周日报道,一组与俄罗斯或极右翼团体有联系的网站和社交媒体账户正在传播虚假信息,并在欧盟关键选举前几周鼓励政治分歧。欧盟调查人员告诉《纽约时报》,该活动与俄罗斯此前的攻击活动具有许多相同的特征,包括俄罗斯干涉2016年美国大选的事件。

来源: cnBeta.COM

详情: http://t.cn/EK5np5C

关于国家信息安全漏洞库(CNNVD)正式启动 2019 年兼容性服务申请工作的通知

CNNVD 兼容性服务是 CNNVD 面向国内外信息安全从业单位,对其产品/服务等涉及的漏洞信息进行规范性评估与认证的服务。通过 CNNVD 兼容性服务的信息安全产品/服务,可实现其漏洞信息拥有统一的规范性命名与标准化描述,为漏洞挖掘、应用、验证与规避等技术研究提供基础支持,为开发更安全的信息产品或软件系统提供理论和技术支撑,进一步满足国家重要信息系统安全保障的需求。

来源: FreeBuf.COM

详情: http://t.cn/EK5nWd9

湖南一网站遭黑客入侵发布大量招嫖信息被查处

2019 年 5 月 5 日,在湘西州公安局网技支队的大力支持下,保靖县公安局成功办理一起违反《中华人民共和国网络安全法》行政案件,及时查处一家涉黄网站。这是自今年扫黑除恶 " 大走访、大排查、大管控、大研判 " 专项整治行动开展以来,该县依法成功处置的全州第一起网络安全类行政案件,有效防止涉黄招嫖有害信息进一步扩散。

来源: 中国经济网

详情: http://t.cn/EK5nTrp

(信息来源于网络,安华金和搜集整理)

学习自然语言处理的基础知识并探索两个有用的 Python 包。

自然语言处理(NLP)是机器学习的一种,它解决了口语或书面语言和计算机辅助分析这些语言之间的相关性。日常生活中我们经历了无数的 NLP 创新,从写作帮助和建议到实时语音翻译,还有口译。

本文研究了 NLP 的一个特定领域:情感分析。重点是确定输入语言的积极、消极或中性性质。本部分将解释 NLP 和情感分析的背景,并探讨两个开源的 Python 包。第 2 部分将演示如何开始构建自己的可扩展情感分析服务。

在学习情感分析时,对 NLP 有一个大体了解是有帮助的。本文不会深入研究数学本质。相反,我们的目标是阐明 NLP 中的关键概念,这些概念对于将这些方法实际结合到你的解决方案中至关重要。

自然语言和文本数据

合理的起点是从定义开始:“什么是自然语言?”它是我们人类相互交流的方式,沟通的主要方式是口语和文字。我们可以更进一步,只关注文本交流。毕竟,生活在 Siri、Alexa 等无处不在的时代,我们知道语音是一组与文本无关的计算。

数据前景和挑战

我们只考虑使用文本数据,我们可以对语言和文本做什么呢?首先是语言,特别是英语,除了规则还有很多例外,含义的多样性和语境差异,这些都可能使人类口译员感到困惑,更不用说计算机翻译了。在小学,我们学习文章和标点符号,通过讲母语,我们获得了寻找直觉上表示唯一意义的词的能力。比如,出现诸如 “a”、“the” 和 “or” 之类的文章,它们在 NLP 中被称为停止词,因为传统上 NLP 算法是在一个序列中找到这些词时意味着搜索停止。

由于我们的目标是自动将文本分类为情感类,因此我们需要一种以计算方式处理文本数据的方法。因此,我们必须考虑如何向机器表示文本数据。众所周知,利用和解释语言的规则很复杂,输入文本的大小和结构可能会有很大差异。我们需要将文本数据转换为数字数据,这是机器和数学的首选方式。这种转变属于特征提取的范畴。

在提取输入文本数据的数字表示形式后,一个改进可能是:给定一个文本输入体,为上面列出的文章确定一组向量统计数据,并根据这些数据对文档进行分类。例如,过多的副词可能会使撰稿人感到愤怒,或者过度使用停止词可能有助于识别带有内容填充的学期论文。诚然,这可能与我们情感分析的目标没有太大关系。

词袋

当你评估一个文本陈述是积极还是消极的时候,你使用哪些上下文来评估它的极性?(例如,文本中是否具有积极的、消极的或中性的情感)一种方式是隐含形容词:被称为 “disgusting”(恶心) 的东西被认为是消极的,但如果同样的东西被称为 “beautiful”(漂亮),你会认为它是积极的。从定义上讲,俗语给人一种熟悉感,通常是积极的,而脏话可能是敌意的表现。文本数据也可以包括表情符号,它带有固定的情感。

理解单个单词的极性影响为文本的 词袋 bag-of-words (BoW)模型提供了基础。它分析一组单词或词汇表,并提取关于这些单词在输入文本中是否存在的度量。词汇表是通过处理已知极性的文本形成称为标记的训练数据。从这组标记数据中提取特征,然后分析特征之间的关系,并将标记与数据关联起来。

“词袋”这个名称说明了它的用途:即不考虑空间位置或上下文的的单个词。词汇表通常是由训练集中出现的所有单词构建的,训练后往往会被修剪。如果在训练之前没有清理停止词,那么停止词会因为其高频率和低语境而被移除。很少使用的单词也可以删除,因为缺乏为一般输入实例提供的信息。

但是,重要的是要注意,你可以(并且应该)进一步考虑单词在单个训练数据实例之外的情形,这称为 词频 term frequency (TF)。你还应该考虑输入数据在所有训练实例中的单词计数,通常,出现在所有文档中的低频词更重要,这被称为 逆文本频率指数 inverse document frequency (IDF)。这些指标一定会在本主题系列的其他文章和软件包中提及,因此了解它们会有所帮助。

词袋在许多文档分类应用程序中很有用。然而,在情感分析中,当缺乏情境意识的问题被利用时,事情就可以解决。考虑以下句子:

  • 我们不喜欢这场战争。
  • 我讨厌下雨天,好事是今天是晴天。
  • 这不是生死攸关的问题。

这些短语的情感对于人类口译员来说是有难度的,而且通过严格关注单个词汇的实例,对于机器翻译来说也是困难的。

在 NLP 中也可以使用称为 “n-grams” 的单词分组。一个二元组考虑两个相邻单词组成的组而不是(或除了)单个词袋。这应该可以缓解诸如上述“不喜欢”之类的情况,但由于缺乏语境意思,它仍然是个问题。此外,在上面的第二句中,下半句的情感语境可以被理解为否定前半部分。因此,这种方法中也会丢失上下文线索的空间局部性。从实用角度来看,使问题复杂化的是从给定输入文本中提取的特征的稀疏性。对于一个完整的大型词汇表,每个单词都有一个计数,可以将其视为一个整数向量。大多数文档的向量中都有大量的零计数向量,这给操作增加了不必要的空间和时间复杂度。虽然已经提出了许多用于降低这种复杂性的简便方法,但它仍然是一个问题。

词嵌入

词嵌入 Word embedding 是一种分布式表示,它允许具有相似含义的单词具有相似的表示。这是基于使用实值向量来与它们周围相关联。重点在于使用单词的方式,而不仅仅是它们的存在与否。此外,词嵌入的一个巨大实用优势是它们关注于密集向量。通过摆脱具有相应数量的零值向量元素的单词计数模型,词嵌入在时间和存储方面提供了一个更有效的计算范例。

以下是两个优秀的词嵌入方法。

Word2vec

第一个是 Word2vec,它是由 Google 开发的。随着你对 NLP 和情绪分析研究的深入,你可能会看到这种嵌入方法。它要么使用一个 连续的词袋 continuous bag of words (CBOW),要么使用一个连续 skip-gram 模型。在 CBOW 中,一个单词的上下文是在训练中根据围绕它的单词来学习的。连续 skip-gram 学习倾向于围绕给定的单词学习单词。虽然这可能超出了你需要解决的问题,但是如果你曾经面对必须生成自己的词嵌入情况,那么 Word2vec 的作者就提倡使用 CBOW 方法来提高速度并评估频繁的单词,而 skip-gram 方法更适合嵌入稀有单词更重要的嵌入。

GloVe

第二个是 用于词表示的全局向量 Global Vectors for Word Representation (GloVe),它是斯坦福大学开发的。它是 Word2vec 方法的扩展,试图通过将经典的全局文本统计特征提取获得的信息与 Word2vec 确定的本地上下文信息相结合。实际上,在一些应用程序中,GloVe 性能优于 Word2vec,而在另一些应用程序中则不如 Word2vec。最终,用于词嵌入的目标数据集将决定哪种方法最优。因此,最好了解它们的存在性和高级机制,因为你很可能会遇到它们。

创建和使用词嵌入

最后,知道如何获得词嵌入是有用的。在第 2 部分中,你将看到我们通过利用社区中其他人的实质性工作,站到了巨人的肩膀上。这是获取词嵌入的一种方法:即使用现有的经过训练和验证的模型。实际上,有无数的模型适用于英语和其他语言,一定会有一种模型可以满足你的应用程序,让你开箱即用!

如果没有的话,就开发工作而言,另一个极端是培训你自己的独立模型,而不考虑你的应用程序。实质上,你将获得大量标记的训练数据,并可能使用上述方法之一来训练模型。即使这样,你仍然只是在理解你输入文本数据。然后,你需要为你应用程序开发一个特定的模型(例如,分析软件版本控制消息中的情感价值),这反过来又需要自己的时间和精力。

你还可以对针对你的应用程序的数据训练一个词嵌入,虽然这可以减少时间和精力,但这个词嵌入将是特定于应用程序的,这将会降低它的可重用性。

可用的工具选项

考虑到所需的大量时间和计算能力,你可能想知道如何才能找到解决问题的方法。的确,开发可靠模型的复杂性可能令人望而生畏。但是,有一个好消息:已经有许多经过验证的模型、工具和软件库可以为我们提供所需的大部分内容。我们将重点关注 Python,因为它为这些应用程序提供了大量方便的工具。

SpaCy

SpaCy 提供了许多用于解析输入文本数据和提取特征的语言模型。它经过了高度优化,并被誉为同类中最快的库。最棒的是,它是开源的!SpaCy 会执行标识化、词性分类和依赖项注释。它包含了用于执行此功能的词嵌入模型,还有用于为超过 46 种语言的其他特征提取操作。在本系列的第二篇文章中,你将看到它如何用于文本分析和特征提取。

vaderSentiment

vaderSentiment 包提供了积极、消极和中性情绪的衡量标准。正如 原论文 的标题(《VADER:一个基于规则的社交媒体文本情感分析模型》)所示,这些模型是专门为社交媒体文本数据开发和调整的。VADER 接受了一组完整的人类标记过的数据的训练,包括常见的表情符号、UTF-8 编码的表情符号以及口语术语和缩写(例如 meh、lol、sux)。

对于给定的输入文本数据,vaderSentiment 返回一个极性分数百分比的三元组。它还提供了一个单个的评分标准,称为 vaderSentiment 复合指标。这是一个在 [-1, 1] 范围内的实值,其中对于分值大于 0.05 的情绪被认为是积极的,对于分值小于 -0.05 的被认为是消极的,否则为中性。

第 2 部分中,你将学习如何使用这些工具为你的设计添加情感分析功能。


via: https://opensource.com/article/19/4/social-media-sentiment-analysis-python

作者:Michael McCune 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地址等。此外,它避免了在 SSH 到 Linux 服务器时重复输入相同的用户名、主机名、IP 地址、端口号。

在 Linux 中创建 SSH 别名

在我知道这个技巧之前,我通常使用以下任意一种方式通过 SSH 连接到远程系统。

使用 IP 地址:

$ ssh 192.168.225.22

或使用端口号、用户名和 IP 地址:

$ ssh -p 22 [email protected]

或使用端口号、用户名和主机名:

$ ssh -p 22 [email protected]

这里

  • 22 是端口号,
  • sk 是远程系统的用户名,
  • 192.168.225.22 是我远程系统的 IP,
  • server.example.com 是远程系统的主机名。

我相信大多数 Linux 新手和(或一些)管理员都会以这种方式通过 SSH 连接到远程系统。但是,如果你通过 SSH 连接到多个不同的系统,记住所有主机名或 IP 地址,还有用户名是困难的,除非你将它们写在纸上或者将其保存在文本文件中。别担心!这可以通过为 SSH 连接创建别名(或快捷方式)轻松解决。

我们可以用两种方法为 SSH 命令创建别名。

方法 1 – 使用 SSH 配置文件

这是我创建别名的首选方法。

我们可以使用 SSH 默认配置文件来创建 SSH 别名。为此,编辑 ~/.ssh/config 文件(如果此文件不存在,只需创建一个):

$ vi ~/.ssh/config

添加所有远程主机的详细信息,如下所示:

Host webserver
    HostName 192.168.225.22
    User sk

Host dns
    HostName server.example.com
    User root

Host dhcp
    HostName 192.168.225.25
    User ostechnix
    Port 2233

使用 SSH 配置文件在 Linux 中创建 SSH 别名

HostHostnameUserPort 配置的值替换为你自己的值。添加所有远程主机的详细信息后,保存并退出该文件。

现在你可以使用以下命令通过 SSH 进入系统:

$ ssh webserver
$ ssh dns
$ ssh dhcp

就是这么简单!

看看下面的截图。

使用 SSH 别名访问远程系统

看到了吗?我只使用别名(例如 webserver)来访问 IP 地址为 192.168.225.22 的远程系统。

请注意,这只使用于当前用户。如果要为所有用户(系统范围内)提供别名,请在 /etc/ssh/ssh_config 文件中添加以上行。

你还可以在 SSH 配置文件中添加许多其他内容。例如,如果你已配置基于 SSH 密钥的身份验证,说明 SSH 密钥文件的位置,如下所示:

Host ubuntu
    HostName 192.168.225.50
    User senthil
    IdentityFIle ~/.ssh/id_rsa_remotesystem

确保已使用你自己的值替换主机名、用户名和 SSH 密钥文件路径。

现在使用以下命令连接到远程服务器:

$ ssh ubuntu

这样,你可以添加希望通过 SSH 访问的任意多台远程主机,并使用别名快速访问它们。

方法 2 – 使用 Bash 别名

这是创建 SSH 别名的一种应急变通的方法,可以加快通信的速度。你可以使用 alias 命令使这项任务更容易。

打开 ~/.bashrc 或者 ~/.bash_profile 文件:

alias webserver='ssh [email protected]'
alias dns='ssh [email protected]'
alias dhcp='ssh [email protected] -p 2233'
alias ubuntu='ssh [email protected] -i ~/.ssh/id_rsa_remotesystem'

再次确保你已使用自己的值替换主机、主机名、端口号和 IP 地址。保存文件并退出。

然后,使用命令应用更改:

$ source ~/.bashrc

或者

$ source ~/.bash_profile

在此方法中,你甚至不需要使用 ssh 别名 命令。相反,只需使用别名,如下所示。

$ webserver
$ dns
$ dhcp
$ ubuntu

这两种方法非常简单,但对于经常通过 SSH 连接到多个不同系统的人来说非常有用,而且非常方便。使用适合你的上述任何一种方法,通过 SSH 快速访问远程 Linux 系统。

建议阅读:

目前这就是全部了,希望它对你有帮助。更多好东西要来了,敬请关注!

干杯!


via: https://www.ostechnix.com/how-to-create-ssh-alias-in-linux/

作者:sk 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出