Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Эвристическими правилами удаляются правильные разделения предложений #8

Open
dimosarts opened this issue Nov 21, 2019 · 7 comments

Comments

@dimosarts
Copy link

Следующие пары предложений расцениваются как одно:
Точка K принадлежит отрезку MN длиной 32 см и делит его в отношении 3:5, считая от точки M. Найдите KM.
Точка К принадлежит отрезку АВ длиной 3 и делит его в отношении 2:7 считая от точки А. Найдите КВ.

Мешает то ли римская M как перечислимый пункт, то ли инициалы, то ли еще что...

@kuk
Copy link
Member

kuk commented Nov 21, 2019

Да, видимо, "M. Найдите" считается фамилией "Найдите" и именем "М".

Попробуйте отключить правило для инициалов. Нужно передать SentSegmenter не дефолтный RULES а убрать initials_left

@dimosarts
Copy link
Author

dimosarts commented Nov 25, 2019 via email

@kuk
Copy link
Member

kuk commented Nov 25, 2019

Но ругается на отсутствие модуля sentenize - не знаю какой выбрать,
чтобы увидеть все эти переменные.

Нужно сделать import razdel.sentenize

@dimosarts
Copy link
Author

dimosarts commented Nov 26, 2019 via email

@MikhailYeka
Copy link

Вопрос в тему. Можно ли как-то добавлять свои правила для сентенизации (sentenize) текста прямо в своём коде? Мне нужно сентенизировать разделение текста на предложения по символу переноса строки '\n'.

@kuk
Copy link
Member

kuk commented Feb 21, 2020

Вопрос в тему. Можно ли как-то добавлять свои правила для сентенизации (sentenize) текста прямо в своём коде? Мне нужно сентенизировать разделение текста на предложения по символу переноса строки '\n'.

Почему бы просто не разбить текст на строки по \n, для каждой строки запустите sentenize

text = ...
for line in text.splitlines():
  for sent in sentenize(line):
     ...

@inthedark122
Copy link
Contributor

Мне тоже пришлось разбивать по \n, в итоге решение получилось вот таким:

import re
from razdel.segmenters.sentenize import SentSplitter, RULES, DELIMITERS, SMILES, SentSegmenter

DELIMITER = '({smiles}|[{delimiters}]|\n)'.format(
    delimiters=re.escape(DELIMITERS),
    smiles=SMILES
)
MY_RULES = []
sentenize_my = SentSegmenter(split=SentSplitter(pattern=DELIMITER), rules=MY_RULES + RULES)

list(sentenize_my(text))

При этому в MY_RULES можно добавить свои правила для объединения

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants