PHPackages                             rosiel/indexing\_study - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. rosiel/indexing\_study

ActiveDrupal-module[Search &amp; Filtering](/categories/search)

rosiel/indexing\_study
======================

Workflow for analyzing automatic document indexing.

2.x-dev(2mo ago)032GPL-2.0-or-laterPHP

Since Feb 25Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/rosiel/indexing_study)[ Packagist](https://packagist.org/packages/rosiel/indexing_study)[ RSS](/packages/rosiel-indexing-study/feed)WikiDiscussions 2.x Synced 1mo ago

READMEChangelogDependencies (1)Versions (1)Used By (0)

AI Indexing Study
=================

[](#ai-indexing-study)

A Drupal suite (Recipe + Module) to assess automated ("robot") indexing of medical journal articles. With a team of subject specialists, researcher expectations of concepts represented in indexing are solicited, validated, and then compared to actual indexing.

Important

Do not install this module alone. A Drupal Recipe exists to deploy this module with necessary Drupal configurations. See Installation, below.

Workflow Overview
-----------------

[](#workflow-overview)

User Roles:

- Administrator
- Study Manager
- Study Participant

[![Workflow diagram](assets/images/workflow.png)](assets/images/workflow.png)

### 0 - Study

[](#0---study)

A **Study** has a name, description, and set of Drupal Users who are part of this Study. Creating or editing Studies is done by an Administrator.

### 1 - Document

[](#1---document)

**Documents** are uploaded into a Study. They should be in the XML format that comes from an OVID download. The maximum uploadable file size depends on server configuration. This step is done by a Study Manager. \[SEE BELOW FOR FEEDS CONFIGURATION AND OVID FIELDS THAT MUST BE THERE\]

### 2 - Assignment

[](#2---assignment)

Create **Assignments**. Each Document is assigned to two different Users for Subject Analysis. During the assignment process it is possible to select all, or a subset, of the Users who are part of the study. The documents will be assigned at random to eligible Users within that selection, if possible, and will cause an error otherwise. This step is done by a Study Manager.

### 3 - Subject Analysis

[](#3---subject-analysis)

Perform **Subject Analysis**. When a User clicks "Analyze", a random Document assigned to them is presented, displaying its title, abstract, and journal title. In this study, the User identifies free-form topics present in the Document that should be represented in the MeSH terms. There is also an option at this stage to reject a document as out of scope (see Rejection Workflow, below). After two (2) Subject Analyses have been performed on a Document, a document is eligible for Consensus.

### 4 - Consensus

[](#4---consensus)

Create **Consensus**. During Consensus, both Subject Analyses (lists of concepts) are presented and the User merges the lists (using their judgement) into a final list of human-generated concepts applied to this Document. This step is performed by the Study Manager(s), ideally collaboratively.

### 5 - Agreement Assignment

[](#5---agreement-assignment)

**Agreement Assignments** are created automatically when a Consensus is created. Each Document is assigned to two (2) different Users for Agreement. If possible, these are different Users than created the Subject Analyses for that Document. \[TODO: Make sure a use who rejected it doen'st see it at this stage\]

### 6 - Agreement

[](#6---agreement)

Determine **Agreement**. Do the MeSH terms assigned by the robot represent the human-generated consensus concepts? The Study Participant performing this step is asked a number of questions such as whether terms were missing from the MeSH, whether terms are erroneously present, there are errors of precision, or if the "robot did better".

### 7 - Conclusion

[](#7---conclusion)

After two Agreements, a Study Manager can create a Conclusion summarizing the two Agreements by noting whether there was agreement between the Agreement creators, whether the indexing was acceptable, and answering the same questions as were posed in the Agreement stage. This step is performed by the Study Manager(s), ideally collaboratively.

### 8 - Results

[](#8---results)

Finally, the results of *completed* documents can be viewed in a Drupal table, or downloaded as a CSV either with pipes ('|') separating multiple values in a column ( for programmatic analysis) or with newlines separating multiple values (better for human reading). Any user who is part of a study may download Results.

### Rejection Workflow

[](#rejection-workflow)

During the Subject Analysis phase, a reviewer may reject a document as out of scope. This will send it back for Assignment for a (potential) third opinion. If a document receives two (2) rejections, it will be classed as Rejected. If on the other hand it receives two (2) completed Subject Analyses, then it will be considered part of the study.

It is possible for a document to be Rejected and have an outstanding Assignment, but that Assignment will not be completed.

Installation
============

[](#installation)

- Install the recipe, rosiel/indexing\_study\_recipe.

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance84

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity18

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

81d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/482486549853aafca06ee61e88aab62cf9282e26248922c5f5376c1a39129bd6?d=identicon)[rosiel](/maintainers/rosiel)

---

Top Contributors

[![rosiel](https://avatars.githubusercontent.com/u/1943338?v=4)](https://github.com/rosiel "rosiel (69 commits)")

### Embed Badge

![Health badge](/badges/rosiel-indexing-study/health.svg)

```
[![Health](https://phpackages.com/badges/rosiel-indexing-study/health.svg)](https://phpackages.com/packages/rosiel-indexing-study)
```

###  Alternatives

[ruflin/elastica

Elasticsearch Client

2.3k50.4M203](/packages/ruflin-elastica)[opensearch-project/opensearch-php

PHP Client for OpenSearch

15024.3M65](/packages/opensearch-project-opensearch-php)[massive/search-bundle

Massive Search Bundle

721.4M13](/packages/massive-search-bundle)[outl1ne/nova-multiselect-filter

Multiselect filter for Laravel Nova.

45802.7k3](/packages/outl1ne-nova-multiselect-filter)[handcraftedinthealps/zendsearch

a general purpose text search engine written entirely in PHP 5

39921.0k35](/packages/handcraftedinthealps-zendsearch)[outl1ne/nova-detached-filters

This Laravel Nova package allows you to detach filters from the filter dropdown

64343.5k](/packages/outl1ne-nova-detached-filters)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
