在句子边界分割文本文件

2024-01-31

我必须处理一个文本文件(一本电子书)。我想对其进行处理,以便每行有一个句子(“换行符分隔的文件”,是吗?)。我如何使用 UNIX 实用程序 sed 来完成此任务?它是否有一个“句子边界”的符号,就像“单词边界”的符号一样(我认为 GNU 版本有这个)。请注意,句子可以以句号、省略号、问号或感叹号结尾,最后两者的组合(例如,?、!、!?、!!!!! 都是有效的“句子终止符”)。输入文件的格式使得某些句子包含必须删除的换行符。

我想到了一个像这样的脚本s/...|. |[!?]+ |/\n/g(为了更好的阅读而未转义)。但它不会从句子内部删除换行符。

在 C# 中怎么样?如果我像 sed 一样使用正则表达式,会不会快得多? (我想不是)。还有其他更快的方法吗?

无论哪种方式(sed 或 C#)都可以。谢谢。


正则表达式是我使用了很长时间的一个不错的选择。

一个非常适合我的正则表达式是

 string[] sentences = Regex.Split(sentence, @"(?<=['""A-Za-z0-9][\.\!\?])\s+(?=[A-Z])");

但是,正则表达式效率不高。此外,虽然该逻辑适用于理想情况,但在生产环境中效果不佳。

例如,如果我的文字是,

美国是一个很棒的国家。大多数人住在那里感到很幸福。

正则表达式方法将其按每个时期拆分为 5 个句子。但我们知道,从逻辑上讲,它应该只分成两个句子。

这就是我寻找机器学习技术的原因,最后 SharpNLP 对我来说效果很好。

 private string mModelPath = @"C:\Users\ATS\Documents\Visual Studio 2012\Projects\Google_page_speed_json\Google_page_speed_json\bin\Release\";
 private OpenNLP.Tools.SentenceDetect.MaximumEntropySentenceDetector mSentenceDetector;
 private string[] SplitSentences(string paragraph)
    {
        if (mSentenceDetector == null)
        {
            mSentenceDetector = new OpenNLP.Tools.SentenceDetect.EnglishMaximumEntropySentenceDetector(mModelPath + "EnglishSD.nbin");
        }

        return mSentenceDetector.SentenceDetect(paragraph);
    }

在此示例中,我使用了 SharpNLP,其中使用了 EnglishSD.nbin - 用于句子检测的预训练模型。

现在,如果我在此方法上应用相同的输入,它将完美地将文本分割成两个逻辑句子。

您甚至可以使用 SharpNLP 项目进行标记化、POSTag、Chuck 等。

要逐步将 SharpNLP 集成到您的 C# 应用程序中,请阅读我撰写的详细文章。 https://stackoverflow.com/questions/11279054/sharpnlp-as-nbin-file-extension/19456965#19456965它将向您解释与代码片段的集成。

Thanks

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在句子边界分割文本文件 的相关文章

  • 在C语言中使用“void”

    我很困惑为什么我们需要通过void转换为 C 函数 int f void return 0 versus int f return 0 什么是正确的做法以及为什么 In C int f 是一种老式的声明 它说f需要固定但未指定数量和类型的参
  • 为什么libc++的shared_ptr实现使用完整内存屏障而不是宽松内存屏障?

    在boost的实现中shared ptr 它用放松内存排序以增加其引用计数 https github com boostorg smart ptr blob master include boost smart ptr detail sp
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 如何在 Swift 中检查 launchOptions?

    我在这里很困惑 我正在尝试检测我的应用程序是否从 LocalNotification 启动 但我所有的代码都被破坏了 func application application UIApplication didFinishLaunching
  • 使用 Spring Security 编码密码的问题

    我正在使用 grails 2 3 0 并在使用 spring security 编码密码时遇到奇怪的问题 这是我对密码进行编码的方法 String encodePassword String password return springSe
  • React Native:指定的子级已经有父级

    我有 2 个组件 DraggableCard 和 ChooseMachine ChooseMachine 使用 DraggableCard 当我到达 ChooseMachine 组件时 它返回错误 The specified child a
  • 如何在第二个连接表中进行多个条件的连接?

    我有2张桌子 第一个表是客户列表 第二个表是这些客户拥有的设备列表 另一个字段包含该客户的一些数据 客户问题 问题是对于每个客户来说 可能存在多个问题 我需要对这些表进行联接 但只返回有其中两个问题的客户的结果 问题是 如果我使用 OR 进
  • iText PDFWriter - 如果少数表格行转到新页面,则写入表格标题

    我在用PdfWriter创建 PDF 文档 我正在添加一个PdfPTable到 PDF 文档 该表有标题行 然后是实际数据行 如果表很大 那么它的一部分将被转移到新页面 我希望此页面也有表格标题行 但是 只有当表数据进入新页面时 我才需要此
  • 将带有日期列的 pyspark DataFrame 转换为 Pandas 会导致 AttributeError

    我有以下数据框 pyspark DATE date nullable true ID string nullable true A double nullable true B double nullable true 在尝试将数据帧转换为
  • 如何使用 Google Apps 脚本在 Gmail 插件中创建此 UI

    有人可以告诉我如何使用 Google Apps 脚本在 Gmail 插件中实现以下 UI 我尝试了 KeyValue 的带有可点击文本的图标我能够实现这一点 但我不知道如何将电子邮件文本放在 keyValue 图标旁边 现在 我不关心带有计
  • fopen 在 Linux 中失败,但在 Windows 中工作

    当我运行下面的代码时 它在 Linux 中失败 但在 Windows 中没有问题 文件名类似于 src 文件夹 文件 char loadProgSource const char filename size t finalLength ch
  • 你会如何用冰糕来记忆玫瑰花?

    尝试注释此代码 玫瑰记忆 给我一个错误Use of undeclared variable git sha typed strict frozen string literal true module Util extend T Sig s
  • 将ArrayList转换为有序集(TreeSet)并返回

    我是一种采用数字列表的方法 例如ArrayList 并将其转换为排序集 例如TreeSet 并返回它 我写了代码 但遇到了一些问题 public TreeSet getSort ArrayList list TreeSet set new
  • 来自 HTTPS URLSession.dataTask 的 0 字节数据

    我正在尝试从 URL 检索一些 JSON 数据 但它每次在数据中返回 0 字节 我检查了几个不同的 SO 帖子 但似乎没有一个与我遇到的确切问题相符 因为我从中获取数据的服务器确实使用带有 TLS 1 2 的 HTTPS 所以我不认为有任何
  • 边框位于文本下方但不穿过文本

    我正在为我的杂志做网页设计 现在 我正在尝试制作类似于 1996 年标题的内容 如下图所示 文本下方有边框 但文本周围有白色背景 任何人都可以帮助我做到这一点吗 当然可以 试试这个 HTML div class heading h1 Hea
  • DAX 相当于 Excel PERCENTRANK.INC 每个类别

    我想在 DAX 中计算 Excel 函数 PERCENTRANK INC 的等效项 但按类别计算 我承认我什至不知道如何计算类别 任何提示将不胜感激 以下是示例数据的 M 代码 let Source Table FromRows Json
  • 如何禁用非员工用户的可浏览 API (is_staff=False)?

    就我而言 我使用 Django REST Framework DRF 作为内部 api 它不适合普通用户使用 因此我想为普通用户禁用它 an admin is staff True should be able to access it a
  • ALM 12:通过 REST 进行身份验证返回 400 错误请求

    我遵循这里的指导 http alm help saas hp com en 12 50 api refs REST TECH PREVIEW Content General Session Management html http alm
  • 如何知道以下代码将创建多少个对象?

    当涉及到字符串时 我对对象的情况感到有点困惑 所以想知道使用以下代码将创建多少个对象 以及有关字符串池和堆的字符串对象创建的一些解释 public static void main String args String str1 Strin
  • D3D11坐标系

    我的一些旧代码最终出现了一堆令人讨厌的黑客行为 以使事情 正确 工作 在移动物体和相机方面 例如必须采用 std sin yaw 而不是 std sin yaw 在实现在线其他地方找到的方程时 通常会让一切变得混乱 在许多情况下都达到了追踪
  • iOS 9 UITableView 分隔符插入(显着左边距)

    我的分隔符有问题UITableViewCells in UITableView on iOS 9 他们有很大的左边距 我已经有用于删除间距的代码iOS 8但它不适用于iOS 9 看起来他们还添加了其他东西 我想它可能与布局边距指南 http
  • 找不到表“cdc.lsn_time_mapping”

    我正在开发一个调用此函数 sys fn cdc map time to lsn 的遗留系统 并且出现以下错误 Invalid object name cdc lsn time mapping 我在对象资源管理器中找不到此表 这个功能有替代品
  • 在句子边界分割文本文件

    我必须处理一个文本文件 一本电子书 我想对其进行处理 以便每行有一个句子 换行符分隔的文件 是吗 我如何使用 UNIX 实用程序 sed 来完成此任务 它是否有一个 句子边界 的符号 就像 单词边界 的符号一样 我认为 GNU 版本有这个