Устранение неоднозначности границ предложения (SBD) является центральной проблемой в области НЛП. К сожалению, те, что я нашел и использовал в прошлом, не на C (поскольку это не любимый язык для строковых задач, если только скорость не является серьезной проблемой)
Pipeline
Если бы это было возможно, я бы создал простой конвейер - если в системе Unix это не должно быть проблемой, но даже если вы работаете в Windows с языком сценариев, вы должны быть в состоянии заполнить пробелы. Это означает, что SBD может быть лучшим инструментом для работы, а не просто единственным SBD, которое вы можете найти для языка Z. Например,
./pdfconvert | SBD | my_C_tool > ...
Это стандартный способ, которым мы делаем вещи в моей работе, и если у вас нет более строгих требований, чем вы заявили, все будет хорошо.
Инструменты
Что касается инструментов, которые вы можете использовать,
- Я бы предложил MXTERMINATOR, который является инструментом SBD, использующим моделирование максимальной энтропии, поскольку мои супервизоры недавно использовали его в своей работе. По их словам, он пропустил несколько разбиений предложений, но это было легко исправить с помощью sed . Они делали SBD на астрономических документах. основной сайт в данный момент отображается внизу, но здесь доступно FTP-зеркало здесь .
- OpenNLP имеет переопределение вышеупомянутого алгоритма с использованием моделирования максимальной энтропии в Java ( JavaDoc ) и является более современным с кажущимся более сильным сообществом позади него.
- Сентрик и многие другие существуют также. Для более подробной информации есть более старый список здесь , который может быть полезен.
Модели и обучение
Теперь некоторые из этих инструментов могут дать вам хорошие результаты из коробки, а некоторые - нет. OpenNLP включает модель для определения английского предложения из коробки, которая может работать для вас. Если ваш домен значительно отличается от того, на котором обучались инструменты, он может работать не очень хорошо. Например, если они были обучены газетному тексту, они могут быть очень хороши в этой задаче, но ужасны в письмах.
Таким образом, вы можете обучить инструмент SBD, приводя его примеры. Каждый из инструментов должен документировать этот процесс, но я предупрежу вас, это может быть немного работы. Это потребовало бы, чтобы вы запустили инструмент в документе X, прошли и вручную исправили все неправильные разбиения и вернули правильно разделенный документ X обратно в инструмент для обучения. В зависимости от размеров документов и используемого инструмента вам может потребоваться сделать это для одного или ста документов, пока вы не получите разумный результат.
Удачи, и если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.