public static async Task Run(Stream blobStream, string name, TraceWriter log) { log.Info($"Processing blob:{name}"); // parse the document to extract images IEnumerable <PageImage> pages = DocumentParser.Parse(blobStream).Pages; // create and apply the skill set to create annotations SkillSet <PageImage> skillSet = CreateCognitiveSkillSet(); var annotations = await skillSet.ApplyAsync(pages); // Commit them to Cosmos DB to be used by full corpus skills such as Topics await cosmosDb.SaveAsync(annotations); // index the annotated document with azure search AnnotatedDocument document = new AnnotatedDocument(annotations.Select(a => a.Get <AnnotatedPage>("page-metadata"))); var searchDocument = new SearchDocument(name) { Metadata = document.Metadata, Text = document.Text, LinkedEntities = annotations .SelectMany(a => a.Get <EntityLink[]>("linked-entities") ?? new EntityLink[0]) .GroupBy(l => l.Name) .OrderByDescending(g => g.Max(l => l.Score)) .Select(l => l.Key) .ToList(), }; var batch = IndexBatch.MergeOrUpload(new[] { searchDocument }); var result = await indexClient.Documents.IndexAsync(batch); if (!result.Results[0].Succeeded) { log.Error($"index failed for {name}: {result.Results[0].ErrorMessage}"); } }
private void OpenAnnotatedDocument() { if (!disposed) { document = AnnotatedDocument.CreateAnnotatedDocument(this, fileName); } }
private void CheckExisting() { if (AnnotatedDocument.CheckExisting(fileName)) { Dispose(); } }
protected virtual void Dispose(bool disposing) { if (!disposed) { fileName = null; document = null; outputLines = null; running = false; disposed = true; } }
private static SearchDocument CreateSearchDocument(string name, IEnumerable <Annotation> annotations) { // index the annotated document with azure search AnnotatedDocument document = new AnnotatedDocument(annotations.Select(a => a.Get <AnnotatedPage>("page-metadata"))); var searchDocument = new SearchDocument(name) { Metadata = document.Metadata, Text = document.Text, LinkedEntities = annotations .SelectMany(a => a.Get <EntityLink[]>("linked-entities") ?? new EntityLink[0]) .GroupBy(l => l.Name) .OrderByDescending(g => g.Max(l => l.Score)) .Select(l => l.Key) .Where(l => !string.IsNullOrEmpty(l)) .ToList(), }; return(searchDocument); }
/// <summary> /// Handles the incoming events /// </summary> public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority priority) { switch (e.Type) { case EventType.UIStarted: ProjectWatcher.Init(); this.ready = true; break; // Catches Project change event and display the active project path case EventType.Command: if (!this.ready) { return; } DataEvent de = e as DataEvent; String cmd = de.Action; if (!cmd.StartsWithOrdinal("ProjectManager.")) { return; } switch (cmd) { case ProjectManagerEvents.Project: ProjectWatcher.SetProject(de.Data as Project); break; case ProjectManagerEvents.TreeSelectionChanged: ProjectWatcher.SelectionChanged(); break; case ProjectManagerEvents.UserRefreshTree: ProjectWatcher.ForceRefresh(); break; case ProjectFileActionsEvents.FileBeforeRename: try { de.Handled = ProjectWatcher.HandleFileBeforeRename(de.Data as String); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectFileActionsEvents.FileRename: try { de.Handled = ProjectWatcher.HandleFileRename(de.Data as String[]); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectFileActionsEvents.FileDeleteSilent: try { de.Handled = ProjectWatcher.HandleFileDelete(de.Data as String[], false); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectFileActionsEvents.FileDelete: try { de.Handled = ProjectWatcher.HandleFileDelete(de.Data as String[], true); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectFileActionsEvents.FileMove: try { de.Handled = ProjectWatcher.HandleFileMove(de.Data as String[]); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectManagerEvents.BuildProject: try { de.Handled = ProjectWatcher.HandleBuildProject(); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectManagerEvents.TestProject: try { de.Handled = ProjectWatcher.HandleTestProject(); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectManagerEvents.BeforeSave: try { de.Handled = ProjectWatcher.HandleSaveProject((string)de.Data); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; } break; case EventType.FileOpen: try { e.Handled = ProjectWatcher.HandleFileOpen((e as TextEvent).Value); } catch (Exception ex) { ErrorManager.ShowError(ex); e.Handled = true; } break; case EventType.FileReload: try { e.Handled = ProjectWatcher.HandleFileReload((e as TextEvent).Value); } catch (Exception ex) { ErrorManager.ShowError(ex); e.Handled = true; } break; case EventType.FileModifyRO: try { e.Handled = ProjectWatcher.HandleFileModifyRO((e as TextEvent).Value); } catch (Exception ex) { ErrorManager.ShowError(ex); e.Handled = true; } break; case EventType.FileNew: case EventType.FileTemplate: try { e.Handled = ProjectWatcher.HandleFileNew((e as TextEvent).Value); } catch (Exception ex) { ErrorManager.ShowError(ex); e.Handled = true; } break; case EventType.ApplyTheme: AnnotatedDocument.ApplyTheme(); break; } }
/// <summary> /// Handles the incoming events /// </summary> public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority priority) { switch (e.Type) { case EventType.UIStarted: ProjectWatcher.Init(); this.ready = true; break; // Catches Project change event and display the active project path case EventType.Command: if (!this.ready) { return; } DataEvent de = e as DataEvent; String cmd = de.Action; if (!cmd.StartsWithOrdinal("ProjectManager.")) { return; } switch (cmd) { case ProjectManagerEvents.Project: ProjectWatcher.SetProject(de.Data as Project); break; case ProjectManagerEvents.TreeSelectionChanged: ProjectWatcher.SelectionChanged(); break; case ProjectManagerEvents.UserRefreshTree: ProjectWatcher.ForceRefresh(); break; case ProjectFileActionsEvents.FileBeforeRename: try { de.Handled = ProjectWatcher.HandleFileBeforeRename(de.Data as String); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectFileActionsEvents.FileRename: try { de.Handled = ProjectWatcher.HandleFileRename(de.Data as String[]); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectFileActionsEvents.FileDeleteSilent: try { de.Handled = ProjectWatcher.HandleFileDelete(de.Data as String[], false); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectManagerEvents.FilePasted: //ProjectFileActionsEvents.FilePaste //cannot distinguish between copy and cut, so assume it was copied var files = de.Data as Hashtable; ProjectWatcher.HandleFileCopied((string)files["fromPath"], (string)files["toPath"]); break; case ProjectFileActionsEvents.FileDelete: try { de.Handled = ProjectWatcher.HandleFileDelete(de.Data as String[], true); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectFileActionsEvents.FileMove: //this is never called, because CodeRefactor catches it before us try { de.Handled = ProjectWatcher.HandleFileMove(de.Data as String[]); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectManagerEvents.FileMoved: try { var file = de.Data as Hashtable; ProjectWatcher.HandleFileMoved((string)file["fromPath"], (string)file["toPath"]); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectManagerEvents.BuildProject: try { de.Handled = ProjectWatcher.HandleBuildProject(); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectManagerEvents.TestProject: try { de.Handled = ProjectWatcher.HandleTestProject(); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; case ProjectManagerEvents.BeforeSave: try { de.Handled = ProjectWatcher.HandleSaveProject((string)de.Data); } catch (Exception ex) { ErrorManager.ShowError(ex); de.Handled = true; } break; } break; case EventType.FileOpen: try { e.Handled = ProjectWatcher.HandleFileOpen((e as TextEvent).Value); } catch (Exception ex) { ErrorManager.ShowError(ex); e.Handled = true; } break; case EventType.FileReload: try { e.Handled = ProjectWatcher.HandleFileReload((e as TextEvent).Value); } catch (Exception ex) { ErrorManager.ShowError(ex); e.Handled = true; } break; case EventType.FileModifyRO: try { e.Handled = ProjectWatcher.HandleFileModifyRO((e as TextEvent).Value); } catch (Exception ex) { ErrorManager.ShowError(ex); e.Handled = true; } break; case EventType.FileNew: case EventType.FileTemplate: try { string file = (e as TextEvent).Value; if (File.Exists(file)) { e.Handled = ProjectWatcher.HandleFileNew(file); } } catch (Exception ex) { ErrorManager.ShowError(ex); e.Handled = true; } break; case EventType.ApplyTheme: AnnotatedDocument.ApplyTheme(); break; } }