Имя: Пароль:
1C
1С v8
Парсинг ответов на письма
,
0 php5
 
02.03.16
11:44
Добрый день!

Платформа: 8.3.6.2299, толстый клиент, обычное приложение (не УФ)

---------------

Кому-нибудь приходилось парсить переписку по почте и ответы втягивать в 1С?

У меня есть письма, в которых идет некая переписка пользователей. Нужно как-то вытягивать только суть (ответы), исключать из переписки весь остальной мусор (подписи и т.д.). Кто-нибудь делал подобное?

P.S: в интернете есть способы втягивать письма полностью, это не подходит.

Сейчас остановился на этом:

Для Каждого ТекСообщение Из мСообщения Цикл
        
        ТекТема = ТекСообщение.Тема;
        
        Для Каждого ТекТекстСообщения ИЗ ТекСообщение.Тексты Цикл
            
            ТекТекст = ТекТекстСообщения.Текст;
            
            ЧтениеHTML = Новый ЧтениеHTML;
            ПостроительDOM = Новый ПостроительDOM;
            ЧтениеHTML.УстановитьСтроку(ТекТекст);
            ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
            
            Текст = ДокументHTML.ЭлементДокумента.ТекстовоеСодержимое;
            
            // как распарсить письмо, чтобы получить только ответы?
            
        КонецЦикла;    
        
    КонецЦикла;
1 php5
 
02.03.16
11:45
Я понимаю что задача не тривиальная, тут все зависит от содержания письма. Ненадеюсь получить 100% решение, но хотя бы на механизмы, которые позволят это сделать, типа регулярные выражения и т.д.

На сколько это вообще рационально?
2 Jonny_Khomich
 
02.03.16
11:46
Всё письмо - мусор.
Как программно определить суть текста?
3 samozvanec
 
02.03.16
11:59
а что если брать текст письма, вставлять в поисковик, гугл например, с первых 10 ссылок брать слова, выделенные жирным и сохранять все предложения из письма, содержащие эти слова?
4 Garykom
 
гуру
02.03.16
12:02
(0) Можно юзать data mining

Выкинуть лишние строчки можно по признакам, регэкспы тут не сильно помогут.

Делал нечто подобное для ячеек в екселе. Когда из формы накладной Торг-12 выкидываю лишнее (шапка, подвал с подписями, повторы заголовкой и итогов на каждой странице).
И остаются только "чистые данные".
5 PLUT
 
02.03.16
12:03
(0) посмотри как в ITIL сделано или в документообороте каком-нибудь...

а вообще платформа 1Ц умеет тексты извлекать практически из чего угодно:

ИзвлечениеТекста (TextExtraction)
ИзвлечениеТекста (TextExtraction)
Свойства:

ИмяФайла (FileName)

Методы:

Записать (Write)
ПолучитьТекст (GetText)

Конструкторы:

По имени файла

Описание:

Предназначен для извлечения текста из файлов произвольного формата. Используется только для операционных систем MS Windows NT 4.0, 2000, XP.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

ИзвлечениеТекста.ПолучитьТекст (TextExtraction.GetText)
ИзвлечениеТекста (TextExtraction)
ПолучитьТекст (GetText)
Синтаксис:

ПолучитьТекст()
Возвращаемое значение:

Тип: Строка.
Текст, извлеченный из файла, или пустая строка в случае ошибки.
Описание:

Извлекает текст из файла. Тип файла определяется по расширению файла (т.е. текст из файла с расширением .tmp извлечен не будет). Для извлечения текста из файлов используется интерфейс IFilter. Он является расширяемым. Можно установить дополнительные модули, чтобы появилась возможность извлекать текст из еще одного типа файлов. По умолчанию текст извлекается из файлов следующих типов (имеющих расширение): ASCX, ASP, ASPX, CSS, HHC, HTA, HTM, HTML, HHT, HTW, HTX, ODC, STM, DOC, DOT, POT, PPS, PPT, XLB, XLC, XLS, XLT, TXT, EML. Подразумевается, что файлы с расширением TXT - это текстовые файлы в кодировке ANSI или UNICODE (UTF-16).

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
Примечание:

Следует использовать только в среде Windows NT 4.0, 2000, XP.
Чтобы узнать, какие расширения для IFilter уже установлены на вашем компьютере, можно скачать и установить программу IFilter Explorer (http://www.citeknet.com).
Пример:

ИмяФайла = "C:/log.txt";
Объект = Новый ИзвлечениеТекста(ИмяФайла);
Текст = Объект.ПолучитьТекст();
Сообщить(Текст);
6 Живой Ископаемый
 
02.03.16
12:05
пусть вместо текста шлют QR-коды.. договоритесь что в них и будет суть.
7 Живой Ископаемый
 
02.03.16
12:07
8 Garykom
 
гуру
02.03.16
12:09
(4)+ самое первое это нужно сделать анализатор повторов кусков текста в письмах, если оно в каждом письме снизу/сверху то это подписи или стандартное приветствие

если же внутри повтор то это ответ с цитированием - в ответном письме есть кусок из посланного то понятно что этот кусок ответная цитата
9 php5
 
02.03.16
12:13
(5) Это для чего-то другого....тут нужен парсер, а не извлечение текста. Ну я все равно попробовал, какая-то хрень на выходе (китайские иероглифы)...

Всем спасибо, как собственно я и думал, это можно сделать, но нужно потратить кучу времени на написание парсера под конкретные условия, т.е. универсально здесь ничего не возможно применить...
10 php5
 
02.03.16
14:33
Я тут погуглил...
Вроде как на других языках программирования людям удается разбирать почтовое сообщение.

Может есть какие-нибудь компоненты для 1С, которые это умеют? Romix компонента например работает с эл. почтой, но не понятно в каком виде она получает...

Есть ли вообще стандарт письма? Сами почтовые клиенты то умеют разбирать, значит есть какая-то служебная информация о структуре письма...
11 Лефмихалыч
 
02.03.16
14:52
(10) ПолучитьИсходныйТекст() и парсь, сколько влезет

традиционный подход к (0) заключается в том, что смыслом признается все, что между заголовками и строкой, состоящей из "--" - с этой последовательности обычно подпись начинается.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший