Хаскелл приговор сегрегации


Я пытаюсь реализовать предложение сегрегации, используя Хаскелл, я добился приличного основная ее помощью NLP.FullStop библиотека, но это, кажется, не учитывает предложений с полной остановки в конце цитаты like this." или like this.'или в конце предложения в квадратных скобках like this.) Я тоже хочу бороться с характером так же как "как большое содержание, я имею дело с использует этот символ. Я не смог сделать успешный regex матча на этого персонажа, поэтому прибегают к замене его " до регулярных выражений...

import qualified Data.ByteString.Char8 as BC
import           Data.List.Split
import qualified NLP.FullStop as FS

splitter :: String -> [String]
splitter = concatMap FS.segment . splitPunc
  where splitPunc = map unwords . split puncSplitter . words
        puncSplitter = keepDelimsR $ whenElt (\word -> BC.pack (splitPrep word) =~ puncExpr :: Bool)
        splitPrep = replace_ '”' '"'
        puncExpr = "\\.[)'\"][^w]?$" :: String

replace_ :: Eq b => b -> b -> [b] -> [b]
replace_ a b = map (\x -> if (a == x) then b else x)


Комментарии
1 ответ

В то время как ваш код работает и использует сигнатуры типа, не хватает документации. Не ясно из вашего описания или код какой splitterпредназначен результат будет на заданном входе. Поэтому документации и испытаний очень приветствуются.

Кроме того, непонятно, почему вы добавили подчеркивания replace_. И ваш код отсутствует, по крайней мере, один включить =~. Я предполагаю, что вы просто забыли включить, что импортировать строки в свой вопрос и в ваш фактический код.

Это, как говорится, fullstop библиотека—по собственной документации;—заполнитель библиотеки:


Обратите внимание, что этот пакет в основном заполнитель. Я надеюсь, что Хаскелл/НЛП
общин будет работать с ним и загрузите более сложные (семейный
в) сегментер(ы) на свои места. Патчи (и разработчика) будет
встречено с восторгом!

Ваша ссора об окончаниях строк также происходит от segmentпоскольку он жесткий-коды разрешенных знаков препинания:

-- https://hackage.haskell.org/package/fullstop-0.1.4/docs/src/NLP-FullStop.html#stopPunctuation
stopPunctuation :: [Char]
stopPunctuation = [ '.', '?', '!' ] -- <<<<

К сожалению, нельзя расширить stopPunctuationпоскольку содержимое в скобках (как это) не приводит к новому приговору. Обратите внимание, что .) и ." не действует в некоторых языках, хотя, они требуют ). и ".так не понятно, что вы пытаетесь достичь здесь (см. комментарий выше документации выше).

Так что в целом, хорошо написано, но без дополнительного разъяснения или документации нет никакого способа, чтобы проверить, является ли функция на самом деле делает то, что вы хотите. Я также предлагаю вам добавить некоторые тесты.

1
ответ дан 29 марта 2018 в 09:03 Источник Поделиться